基于protuse的单片机模拟的实例.doc_第1页
基于protuse的单片机模拟的实例.doc_第2页
基于protuse的单片机模拟的实例.doc_第3页
基于protuse的单片机模拟的实例.doc_第4页
基于protuse的单片机模拟的实例.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本人对单片机的一些了解,在这里和大家分享。(1)基于AT89C52的同步串口通信 单片机1程序(程序在Kile C51上运行通过。) /* 文件名 : 液晶1602显示.c* 描述 : 该程序实现了对液晶1602的控制。* 创建人 : 东流,2009年4月10日* 版本号 : 2.0*/#include#define uchar unsigned char#define uint unsigned int/这三个引脚参考资料sbit E=P35;/1602使能引脚sbit RW=P36;/1602读写引脚sbit RS=P37;/1602数据/命令选择引脚sbit aaa=P10;sbit bbb=P11;sbit aa=P30;sbit bb=P31;/* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无*/void delay()int i,j;for(i=0; i=100; i+)for(j=0; j=0)while(1)if(aaa=0)bbb=0;break; aaa=1;bbb=1;i-;i-;i-;i-;i-;i-;RI=0;while(1)if(RI!=0)break;L1602_char(2,j,SBUF);j+;ti-; REN=0;RI=1;while(5)i=0; 单片机2程序#includesbit a=P20;sbit b=P21;sbit C=P31;void main()int i=0 ,j=0;char str20= ; a=1;b=1; SM0=0;SM1=0; SM2=0;/RI=0; while(j=14)for(i=0;i=100;i+);a=0;/SBUF=0;while(1)if(b=0)break;b=1;a=1;SBUF=strj;TI=0;j+;while(1);(2)基于MSP430的科学计算器单片机程序:(程序在IAR430上运行通过。)#include #include #include #include #include unsigned char dis1=WORK START;/状态显示unsigned char dis2=ALCOHOL TEST;char dis,j,a,c,cls= ;char ak,ch=1,aa20,bb20;char i=0,n=0,m=0,flag=1,pf=1,dnf=0,deng=0,du=0;double sum=0,sum1=0;/int c=7;void delay(unsigned char ms) /延时1unsigned char i,j;while(ms-)for(i=0;i65;i+)for(j=0;j50;j+)void delay2(unsigned int time ) /延时2unsigned int n;n=0;while (ntime) n+;return;char lcd_bz() /LCD判忙char result;P4OUT=0X8E;/rs=0;/rw=1;/ep=1;P1DIR=0X00;result=P1IN&0x80;/ep=0;P4OUT=0X8A;return result;lcd_wcmd(unsigned char cmd) /写指令数据到LCDwhile(lcd_bz()/rs=0;/rw=0;/ep=1;P4OUT=0X8c;P1DIR=0XFf;P1OUT=cmd;/ep=1;P4OUT=0X8C;/ep=0;P4OUT=0X88;lcd_pos(unsigned char pos) /设定显示位置lcd_wcmd(pos | 0x80);lcd_wdat(unsigned char dat) /写入显示数据到LCDwhile(lcd_bz();/rs=1;/rw=0;/ep=0;P4OUT=0X89;P1DIR=0Xff;P1OUT=dat;/ep=1;P4OUT=0X8D;/ep=0;P4OUT=0X89;lcd_init() /LCD初始化lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);unsigned char key_scan() unsigned char t,k1,k2,key; unsigned int kt; P3DIR=0X00; P5DIR=0Xff; / P3OUT=0XFF; P5OUT=0x00; / P3DIR=0X00; / P3IN|=0XFF; / P3DIR=0X00; t=P3IN; / P3DIR=0XFF; / P6DIR=0XFF; if(t!=0xFF) delay(10); / P3DIR=0X00; t=P3IN; / P3DIR=0XFF; / P6DIR=0X00; if(t!=0xFF) /P3DIR=0XFF; / P3DIR=0X00; k1=P3IN; P5OUT=0X00; P3DIR=0XFF; P5DIR=0X00; / P6OUT|=0xFF; P3OUT=0x00; / P3DIR=0XFF; / P3OUT=0xff;/ P3OUT=0x00; P5DIR=0X00; / P6DIR=0X00; / P6IN|=0XFF; k2=P5IN; P2DIR=0XFF; P2OUT=k2; P3OUT|=0X00;/ k2|=0xC0; kt=k1; kt=kt8; kt+=k2; switch(kt) case 0xFEFE: key=3;break;case 0xFDFE: key=2;break;case 0xfbfe: key=1;break;case 0xf7fe: key=B;break;case 0xeffe: key=U;break;/2ndf/case 0xdffe: key=23;break;/case 0xbffe: key=22;break;case 0xfEFD: key=6;break;case 0xFDFD: key=5;break;case 0xfbfd: key=4;break;case 0xf7fd: key=t;break; case 0xeffd: key=r;break;/du/rad/case 0xdffd: key=16;break;/case 0xbffd: key=15;break;case 0xfefb: key=9;break;case 0xfdfb: key=8;break;case 0xfbfb: key=7;break;case 0xf7fb: key=s;break; case 0xeffb: key=Z;break;/sin/case 0xdffb: key=9;break;/case 0xbffb: key=8;break;case 0xfef7: key=c;break;case 0xfdf7: key=.;break;case 0xfbf7: key=0;break;case 0xf7f7: key=k;break;/y case 0xeff7: key=y;break;/cos/case 0xdff7: key=2;break;/case 0xbff7: key=1;break; case 0xfeef: key=/;break;case 0xfdef: key=-;break;case 0xfbef: key=P;break; case 0xf7ef: key=D;break;/ 1/x case 0xefef: key=a;break;/tan/case 0xdfef: key=2;break;/case 0xbfef: key=1;break; case 0xfedf: key=;break;case 0xfddf: key=*;break;case 0xfbdf: key=+;break;case 0xf7df: key=p;break;/pi/e case 0xefdf: key=l;break;/log/case 0xdfdf: key=2;break;/case 0xbfdf: key=1;break;default: key=32;break; return key; else return(32); else return(32);void gcvt()char p20=,p120=,k=0;char i=0,b=0;double z;unsigned long y; if(sum0)pk=-;sum=0-sum;k+; y=(unsigned long)sum; z=sum-y; if(y) while(y) p1b=y%10+0x30;y/=10;b+; else p10=0+0x30; b=strlen(p1); for(i=0;istrlen(p1);i+,k+,b-) pk=p1b-1; for(i=0;i20;i+)aai=0;p1i=0; k=0;i=0; p1k=.;k+; while(z!=0.0)&(i!=6) z=z*10; y=(int)(z); z-=y; p1k=y+0x30;k+;i+; for(i=0;i20;i+)aai=0; strcat(p,p1); strcpy(aa,p);void cls_one()char cl=0,cc=16;lcd_pos(0); while(cc)/显示开始工作lcd_wdat(clscl);cl+;cc-;return;void cls_two()char cl=0,cc=16;lcd_pos(0x40); while(cc)/显示开始工作lcd_wdat(clscl);cl+;cc-;return;void main()/double dou;char jj=0, p=-,di=0;P4DIR=0Xff;P1DIR=0Xff;P6DIR=0Xff;P6OUT=0X00;P6OUT|=BIT4;/数据初始化lcd_init();delay(3);lcd_pos(0);dis=0;while(dis1dis!=0)/显示开始工作lcd_wdat(dis1dis);dis+;delay(3);dis=0;lcd_pos(0x43);while(dis2dis!=0)/显示开始测试lcd_wdat(dis2dis);dis+;delay(100);lcd_init();delay(3);lcd_pos(0x40);lcd_wdat(0x30);dis=0;while(1)ak=key_scan();switch(ak) /选择键值 case 32:break; / 无case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:if(flag)lcd_init();for(j=0;j20;j+)aaj=0;flag=0; if(m=1)i=n;a=ak;aai=ak;i+;deng=0;m=0;lcd_pos(dis);if(dis=15)dis=0x3f;dis+;lcd_wdat(a);break;case +:case -:case *:case /: if(deng)cls_one();c=ak; strcpy(bb,aa); n=i; for(j=0;j20;j+) aaj=0; i=0;flag=0;pf=2;m=0; lcd_pos(dis);dis+; lcd_wdat(c);if(dis=15)dis=0x3f;break;case =:sum1=atof(aa);sum=atof(bb);switch(c)case +:sum=sum+sum1;break;case -:sum=sum-sum1;break;case *:if(sum=sum1)sum=sum-1;sum=sum*sum1+sum1;else sum=sum*sum1;break;case /:sum=sum/sum1;break;case :sum=pow(sum,sum1);break; case :sum1=1/sum1; sum=pow(sum,sum1); break;default:goto lloop; gcvt();flag=1;lloop:/lcd_init(); cls_two(); delay(1);lcd_pos(0x40);dis=strlen(aa); j=0;while(dis)/显示开始测试 / aaj+=0x30;lcd_wdat(aaj);dis-;j+;for(j=0;j20;j+)bbj=0;i=0;c=0;pf=1;n=0;dis=0;deng=1;m=0; sum=0;sum1=0;break;case .:a=.;aai=.;i+;lcd_pos(dis);if(dis=15)dis=0x3f;dis+;lcd_wdat(a);break; case c:lcd_init(); for(int j=0;j20;j+) aaj=0;bbj=0;i=0;flag=1;c=0;du=0;pf=1;n=0;dnf=0,deng=0,dis=0;sum=0;sum1=0;m=0;lcd_pos(0x40); lcd_wdat(0x30);if(du)P6OUT&=BIT4;P6OUT|=BIT2; else P6OUT&=BIT2;P6OUT|=BIT4; if(dnf)P6OUT|=BIT0;else P6OUT&=BIT0;break;case D:sum1=atof(aa);sum=1/sum1;gcvt();flag=1;goto lloop; case t:sum1=atof(aa);sum=atof(aa);sum=sum-1;sum=sum*sum1+sum1;gcvt();flag=1;goto lloop; case s:sum1=atof(aa);sum=atof(aa);sum=sum-1;sum=sum*sum1+sum1;sum*=sum1; gcvt();flag=1;goto lloop; case B: if(i!=0)i-;aai=0; cls_one(); delay(1);di=0;di=strlen(bb); jj=0; if(c!=0) lcd_pos(0);while(di)/显示开始测试lcd_wdat(bbjj);di-;jj+; di=strlen(bb); lcd_pos(di);lcd_wdat(c); jj=0; di+;delay(1); lcd_pos(di); di=strlen(aa);while(di)/显示开始测试 lcd_wdat(aajj);di-;jj+; elseif(c!=0)c=0;cls_one();delay(1);di=0;lcd_pos(0);di=strlen(bb); jj=0;while(di)/显示开始测试lcd_wdat(bbjj);di-;jj+;elseif(n!=0)n-;bbn=0;cls_one();delay(1);di=0;lcd_pos(0);di=strlen(bb); jj=0;while(dis)/显示开始测试lcd_wdat(bbjj);dis-;jj+;m=1; strcpy(aa,bb);flag=0;if(c!=0)dis=strlen(bb)+i+1;else dis=strlen(aa);break; case P:if(i=0)if(pf=1)cls_one();for(jj=0;jj20;jj+)aajj=0;aa0=-;i+;flag=0;pf=2;lcd_pos(dis); lcd_wdat(p);dis+;elsedis=0;sum=atof(aa);sum=0-sum;gcvt();cls_one(); di=strlen(bb); jj=0; if(c!=0) lcd_pos(dis);while(di)/显示开始测试lcd_wdat(bbjj);di-;jj+; di=strlen(bb); lcd_pos(dis+di);lcd_wdat(c); jj=0; dis+;delay(1); lcd_pos(dis+di); di=strlen(aa);while(di)/显示开始测试 lcd_wdat(aajj);di-;jj+;flag=0;if(c!=0)dis=strlen(bb)+i+1;else dis=strlen(aa); break; case U:dnf=1-dnf;if(dnf)P6OUT|=BIT0;else P6OUT&=BIT0;break; case Z: sum=atof(aa); if(du)sum=sum/180*3.1415926535897932384626433;if(dnf=0)sum=sin(sum);else sum=atof(aa); sum=asin(sum); if(du)sum=sum*180/3.14159265; if(-0.000001sum&sum0.000001)sum=0;gcvt(); jj=0; cls_two(); delay(1);lcd_pos(0x40); di=strlen(aa);while(di)/显示开始测试 lcd_wdat(aajj);di-;jj+;flag=1;i=0;dis=0;break; case y:sum=atof(aa); if(du)sum=sum/180*3.14159265;if(dnf=0)sum=cos(sum);else sum=atof(aa);sum=acos(sum); if(du)sum=sum*180/3.14159265;if(-0.000001sum&sum0.000001)sum=0;gcvt(); jj=0; cls_two(); delay(1);lcd_pos(0x40); di=strlen(aa);while(di)/显示开始测试 lcd_wdat(aajj);di-;jj+;flag=1;i=0;dis=0;break; case a:sum=atof(aa); if(du)sum=sum/180*3.14159265;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论