完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个是我以前做的基于430单片机的程序,里面有菜单的实现,你可以自己看看研究下。关于显示的部分时序程序在头文件#include "5510.h"里,不过昨天我回答的那个问题已经有了。
#include "msp430x26x.h" #include "5510.h" #include "eeprom.h" #include "math.h" #define uchar unsigned char #define uint unsigned int //#define Num_of_Results 8 //static unsigned int results[Num_of_Results]; #define Num_of_Results sqrt(95*95+15*15) #define Num_of_Results1 sqrt(95*95+65*65) unsigned char Seg_Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //数码管编码 unsigned char Clockwise[8]={0x01,0x09,0x08,0x0a,0x02,0x06,0x04,0x05}; //大电机的四拍和八拍 接口分别为2431 unsigned char AntiClockwise[8]={0x05,0x04,0x06,0x02,0x0a,0x08,0x09,0x01}; ////90/24=3.75 一个时序八个脉冲为30度 unsigned char Clockwise11[8]={0x10,0x90,0x80,0xa0,0x20,0x60,0x40,0x50}; //正转表格,换算成二进制 1000 1100,0100 0110,0010 0011,0001 1001 unsigned char AntiClockwise11[8]={0x50,0x40,0x60,0x20,0xa0,0x80,0x90,0x10}; //反转表格,换算成二进制 1001 0001,0011 0010,0110 0100,1100 1000 void Test_Seg(uint seg1,uint seg2,uint seg3,uint seg4); void Go_Clock(); //向上拉 void Go_Clock1(float m); void Go_AntiClock(); //向下放 void Go_AntiClock1(float m); void Go_Clock2(); //向上拉 void Go_Clock22(float m); void Go_AntiClock2(); //向下放 void Go_AntiClock22(float m); void HuaXian(); void HuaXian1(); void HuaXian2(); void HuaXian3(); void HuaYuan(); void HuaZhiXian(); void HuaDuoBianXing(); void fuwei(); void Find_Light(); void XianShi(); void XianShi1(); void XianShi2(); void Init_key(); void Get_Keycode(void); uint keyvalue=0; uint HuaXianflag1 = 0,HuaXianflag2 = 0; uint ADvalue = 4095; uint X=0,Y=0; //坐标值 uint I=1,num=0; uint A[20]; uint v1=1,v2=1; double l1=0,l2= 0,ltemp1=0,ltemp2=0; //线的长度 uint m1=0,n1=0; float t1=0,t2=0; void Init_ADC() { ADC12CTL0 = SHT0_2 + ADC12ON;// +MSC; // Set sampling time, turn on ADC12,转换后立刻执行 ADC12CTL1 = SHP ;//+ CONSEQ_2; // Use sampling timer,转换模式单通道多次转换 //ADC12IE = 0x01; // Enable interrupt //ADC12MCTL1 = INCH_1; ADC12CTL0 |= ENC; // Conversion enabled P6DIR &= 0x01; // P6.0, i/p P6SEL |= 0x01; // P6.0-ADC option select //_BIS_SR(GIE); //使能中断 } void Start_ADC() { ADC12CTL0 |= ADC12SC; // Start convn, software controlled while((ADC12IFG & ADC12BUSY)==0); if(ADvalue > ADC12MEM0) { ADvalue = ADC12MEM0; } } void main(void) { WDTCTL = WDTPW + WDTHOLD;//关闭看门狗Stop watchdog timer to prevent time out reset /////////////////////////////系统初始化/////////////////////////////////// l1=Num_of_Results; l2= Num_of_Results1; ltemp2 = l2; ltemp1 = l1; LCD12864_initial(); //LCD初始化,包含了数码管和LED灯初始化 Init_key(); //键盘扫描初始化 Init_ADC(); //ADC初始化 P5DIR = 0xff; // P50-P57, 步进电机 P5OUT = 0x00; // P5 LCD12864_clear(); LCD12864_gotoXY(1,0); //第1行,第1列显示 LCD12864_sendstr("移动固定的点按9"); LCD12864_gotoXY(2,0); //第1行,第1列显示 LCD12864_sendstr("直线移到固定点10"); LCD12864_gotoXY(3,0); //第1行,第1列显示 LCD12864_sendstr("画圆按11"); LCD12864_gotoXY(4,0); //第1行,第1列显示 LCD12864_sendstr("多边形按12"); /*LCD12864_gotoXY(4,0); //第1行,第1列显示 LCD12864_sendstr("逆时针转90度按4");*/ /////////////////////////////////主循环/////////////////////////////////// while(1) { Get_Keycode(); //1000对应于27 ~28左电机 //1000对应于37 ~38右电机 if(keyvalue==1) { Go_Clock(); keyvalue=0; } else if(keyvalue==2) { Go_AntiClock(); keyvalue=0; } else if(keyvalue==3) { Go_Clock2(); keyvalue=0; } else if(keyvalue==4) { Go_AntiClock2(); keyvalue=0; } else if(keyvalue==5) { Go_Clock1(100); keyvalue=0; } else if(keyvalue==6) { Go_AntiClock1(100); keyvalue=0; } else if(keyvalue==7) { Go_Clock22(100); keyvalue=0; } else if(keyvalue==8) { Go_AntiClock22(100); keyvalue=0; } else if(keyvalue==9) { keyvalue=0; XianShi(); HuaXian(); HuaXianflag1=0,HuaXianflag2=0; //LCD12864_clear(); } else if(keyvalue==10) { keyvalue=0; XianShi(); HuaZhiXian(); HuaXianflag1=0,HuaXianflag2=0; //LCD12864_clear(); } else if(keyvalue==11) { HuaYuan(); keyvalue=0; } else if(keyvalue==12) { keyvalue=0; XianShi1(); XianShi2(); for(uint i=0;i<2*num;i++) { X=A[i],Y=A[i+1]; HuaZhiXian(); Delayms(200); i++; } X=A[0],Y=A[1]; HuaZhiXian(); HuaXianflag1=0,HuaXianflag2=0; //LCD12864_clear(); } else if(keyvalue==16) { fuwei(); keyvalue=0; } else if(keyvalue!=0&&keyvalue!=1&&keyvalue!=2&&keyvalue!=3&&keyvalue!=4&&keyvalue!=5&&keyvalue!=6&&keyvalue!=7) { //Test_Seg(0,0,keyvalue/10,keyvalue%10); Int_char(keyvalue); LCD12864_gotoXY(3,0); //第1行,第1列显示 LCD12864_sendstr("按键为:"); LCD12864_gotoXY(3,4); //第1行,第1列显示 LCD12864_sendstr(Result); } } } ///////////////////////////////////////////////////////////////////////// void XianShi() { LCD12864_clear(); uint i=0,j=0,flag=0; while(HuaXianflag1!=1||HuaXianflag2!=2) { Get_Keycode(); if(keyvalue!=0) { flag++; if(flag<=2) i=i*10+keyvalue; if(flag>2) j=j*10+keyvalue; } LCD12864_gotoXY(1,0); //第1行,第1列显示 LCD12864_sendstr("先输入横坐标:"); LCD12864_gotoXY(2,0); //第1行,第1列显示 LCD12864_sendstr("再输入纵坐标:"); Int_char(i); LCD12864_gotoXY(1,7); //第1行,第1列显示 LCD12864_sendstr(Result); Int_char(j); LCD12864_gotoXY(2,7); //第1行,第1列显示 LCD12864_sendstr(Result); keyvalue=0; if(flag==4) HuaXianflag1=1,HuaXianflag2=2; } X=i;Y=j; } void XianShi1() { LCD12864_clear(); uint i=0,flag=0; while(flag!=1) { Get_Keycode(); if(keyvalue!=0) { i=keyvalue; flag=1; } LCD12864_gotoXY(1,0); //第1行,第1列显示 LCD12864_sendstr("输入多边形的边数"); LCD12864_gotoXY(2,0); //第1行,第1列显示 LCD12864_sendstr("边数<10 "); Int_char(i); LCD12864_gotoXY(1,8); //第1行,第1列显示 LCD12864_sendstr(Result); keyvalue=0; } num=i; Delayms(200); } void XianShi2() { uint n; LCD12864_clear(); LCD12864_gotoXY(1,0); //第1行,第1列显示 LCD12864_sendstr("先输入横坐标:"); LCD12864_gotoXY(2,0); //第1行,第1列显示 LCD12864_sendstr("再输入纵坐标:"); Delayms(1000); LCD12864_clear(); for(n=0;n<2*num;n++) { HuaXianflag1=0,HuaXianflag2=0; uint i=0,j=0,flag=0; while(HuaXianflag1!=1||HuaXianflag2!=2) { Get_Keycode(); if(keyvalue!=0) { flag++; if(flag<=2) i=i*10+keyvalue; if(flag>2) j=j*10+keyvalue; } Int_char(i); LCD12864_gotoXY(1,n); //第1行,第1列显示 LCD12864_sendstr(Result); Int_char(j); LCD12864_gotoXY(2,n); //第1行,第1列显示 LCD12864_sendstr(Result); /* keyvalue=n/2; Int_char(keyvalue); LCD12864_gotoXY(4,0); //第1行,第1列显示 LCD12864_sendstr(当前个数为:"); LCD12864_gotoXY(4,7); //第1行,第1列显示 LCD12864_sendstr(Result);*/ keyvalue=0; if(flag==4) HuaXianflag1=1,HuaXianflag2=2; } A[n]=i;A[n+1]=j; n++; Delayms(200); } } /////////////////////////////////////////////////////////////////////// void HuaYuan() { double i=0; double a=30,b=40; X=a;Y=b; HuaXian(); Delayms(100); for(i=0;i<100;i++) { X=a+15*cos(i*314/18000); Y=b+15*sin(i*314/18000); HuaXian(); } for(i=100;i<200;i++) { X=a+15*cos(i*314/18000); Y=b+15*sin(i*314/18000); HuaXian1(); } for(i=200;i<300;i++) { X=a+15*cos(i*314/18000); Y=b+15*sin(i*314/18000); HuaXian2(); } for(i=300;i<360;i++) { X=a+15*cos(i*314/18000); Y=b+15*sin(i*314/18000); HuaXian3(); } } /*void HuaDuoBianXing() { double a=11,b=11; X=a;Y=b; HuaXian(); Delayms(100); X=30; Y=60; HuaZhiXian(); Delayms(100); X=50; Y=20; HuaZhiXian(); Delayms(100); X=11; Y=11; HuaZhiXian(); Delayms(100); }*/ void HuaZhiXian() { float m=0,n=0; float temp1,temp2; temp1=ltemp1,temp2=ltemp2; uint flag1=0,flag2=0; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(X>40 && Y>50){ I=28;v1=450;v2=350;}///////// if(X<20 && Y>20 ){I=15;v1=445;v2=375;}//423 369/////// if( X>=20&& X<=40 &&Y<=20){I=13;v1=550;v2=370;}//423 369 400 375 400 390 370 350 370 if(X>40&&Y<=20 ){I=12;v1=390;v2=370;} if(X>=20 && X<=30 && Y<=30 && Y>20){I=20;v1=470;v2=385; }//423 369 440 370 445 375 460 383 if(X>30 && X<=40 && Y<=50 && Y>30){I=20;v1=480;v2=375; }//20 445 369 if(X>=20&&X<=30&&Y>30&&Y<=50) {I=20;v1=400;v2=380; } if(X>30&&X<=40&&Y>20&&Y<=30) {I=18;v1=580;v2=400; } if(X>20 &&X<=40 && Y>50){I=18;v1=420;v2=376;} if(X>40 && Y>20 && Y<=50){I=10;v1=530;v2=365;} if(X<20 && Y<=20){I=10;v1=434;v2=377; }//391 369 400 380 if(temp1>ltemp1) { m=(temp1-ltemp1)*1000/v1;//485 flag1 = 1; } else if(temp1<=ltemp1) { m=(ltemp1-temp1)*1000/v1; flag1 = 2; } if(temp2>ltemp2) { n=(temp2-ltemp2)*1000/v2;//425 flag2 = 1; } else if(temp2<=ltemp2) { n=(ltemp2-temp2)*1000/v2; flag2 = 2; } m /=I; n /=I; for(double i=0;i { if(flag1==1&&flag2==1)Go_Clock1(m),Go_Clock22(n); if(flag1==1&&flag2==2)Go_Clock1(m),Go_AntiClock22(n); if(flag1==2&&flag2==1)Go_AntiClock1(m),Go_Clock22(n); if(flag1==2&&flag2==2)Go_AntiClock1(m),Go_AntiClock22(n); } } void HuaXian() { float m=0,n=0,temp1,temp2; temp1=ltemp1,temp2=ltemp2; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(temp2>ltemp2) { n=(temp2-ltemp2)*1000/345; Go_Clock22(n); } else if(temp2<=ltemp2) { n=(ltemp2-temp2)*1000/345; Go_AntiClock22(n); } if(temp1>ltemp1) { m=(temp1-ltemp1)*1000/391; Go_Clock1(m); } else if(temp1<=ltemp1) { m=(ltemp1-temp1)*1000/391; Go_AntiClock1(m); } } void HuaXian1() { float m=0,n=0,temp1,temp2; temp1=ltemp1,temp2=ltemp2; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(temp2>ltemp2) { n=(temp2-ltemp2)*1000/375; Go_Clock22(n); } else if(temp2<=ltemp2) { n=(ltemp2-temp2)*1000/375; Go_AntiClock22(n); } if(temp1>ltemp1) { m=(temp1-ltemp1)*1000/391; Go_Clock1(m); } else if(temp1<=ltemp1) { m=(ltemp1-temp1)*1000/391; Go_AntiClock1(m); } } void HuaXian2() { float m=0,n=0,temp1,temp2; temp1=ltemp1,temp2=ltemp2; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(temp2>ltemp2) { n=(temp2-ltemp2)*1000/280; Go_Clock22(n); } else if(temp2<=ltemp2) { n=(ltemp2-temp2)*1000/280; Go_AntiClock22(n); } if(temp1>ltemp1) { m=(temp1-ltemp1)*1000/550; Go_Clock1(m); } else if(temp1<=ltemp1) { m=(ltemp1-temp1)*1000/550; Go_AntiClock1(m); } } void HuaXian3() { float m=0,n=0,temp1,temp2; temp1=ltemp1,temp2=ltemp2; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(temp2>ltemp2) { n=(temp2-ltemp2)*1000/470; Go_Clock22(n); } else if(temp2<=ltemp2) { n=(ltemp2-temp2)*1000/470; Go_AntiClock22(n); } if(temp1>ltemp1) { m=(temp1-ltemp1)*1000/400; Go_Clock1(m); } else if(temp1<=ltemp1) { m=(ltemp1-temp1)*1000/400; Go_AntiClock1(m); } } void fuwei() { float m=0,n=0; ltemp1=sqrt((15+X)*(15+X)+(95-Y)*(95-Y)); ltemp2=sqrt((65-X)*(65-X)+(95-Y)*(95-Y)); if(l1>ltemp1) { m=(l1-ltemp1)*1000/391; Go_AntiClock1(m); } else if(l1<=ltemp1) { m=(ltemp1-l1)*1000/391; Go_Clock1(m); } if(l2>ltemp2) { n=(l2-ltemp2)*1000/345; Go_AntiClock22(n); } else if(l2<=ltemp2) { n=(ltemp2-l2)*1000/345; Go_Clock22(n); } } void Go_Clock() { int i=0,j=0; for(i=0;i<10;i++) { for(j=0;j<8;j++) { P5OUT = Clockwise[j]; Delayus(900); } } } void Go_AntiClock() { int i=0,j=0; for(i=0;i<10;i++) for(j=0;j<8;j++) { P5OUT = AntiClockwise[j]; Delayus(900); } } void Go_Clock1(float m) { int i=0,j=0; for(i=0;i { P5OUT = Clockwise[j]; Delayus(900); } } void Go_AntiClock1(float m) { int i=0,j=0; for(i=0;i { P5OUT = AntiClockwise[j]; Delayus(900); } } void Go_Clock2() { int i=0,j=0; for(i=0;i<10;i++) for(j=0;j<8;j++) { P5OUT = Clockwise11[j]; Delayus(900); } } void Go_AntiClock2() { int i=0,j=0; for(i=0;i<10;i++) for(j=0;j<8;j++) { P5OUT = AntiClockwise11[j]; Delayus(900); } } void Go_Clock22(float m) { int i=0,j=0; for(i=0;i { P5OUT = Clockwise11[j]; Delayus(900); } } void Go_AntiClock22(float m) { int i=0,j=0; for(i=0;i { P5OUT = AntiClockwise11[j]; Delayus(900); } } ////////////////////////////////////////////////////////// void Find_Light() { } /*******功 能: 键盘扫描初始化*****/ void Init_key() { P7DIR=0x0F; //键盘扫描初始化 P7REN=0xF0; //输入上下拉电阻使能,输出上下拉不使能 P7OUT=0xF0; //输入上拉 } void Get_Keycode(void) { } void Test_Seg(uint seg1,uint seg2,uint seg3,uint seg4) { ////////////////////////////////////// } |
|
相关推荐
5 个讨论
|
|
学习中,挺好的程序。
|
|
|
|
|
|
看过。。。。。。。。。。。。。。。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3057个成员聚集在这个小组
加入小组2989 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3715 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2367 浏览 1 评论
4835 浏览 1 评论
2595 浏览 1 评论
1636浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3717浏览 2评论
2989浏览 1评论
1828浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 02:05 , Processed in 1.519396 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号