- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51计算器代码
51单片机做的简易计算器? //by 河南大学 电子信息06级 金玉川//使用时应保证本计算器的输入数值与输出数值均不大于65536 数码管驱动芯片用的MAX7219,运算和键盘扫描用AT89S51#includeat89x51.hunsigned char key,temp;#define? DIN P1_0?//串行数据输入引脚#define? CLK P1_2?//同步时钟#define? LOAD P1_1?//数据输入使能?//--------10ms延时子程序-------------void delay10ms(unsigned char time){unsigned char a,b,c;for(a=0;atime;a++)for(b=0;b10;b++) for(c=0;c120;c++) ;}//--------按键扫描子程序-------------//“1--9”号键的key值分别为1--9;? “ +、-、*、/ ” 的key 值分别为13、14、15、16//“ = ”的key 值为10//“on/c”的key值为11void KeyScan(void){P2=0xFF;P2_0=0;temp=P2;temp=0xF0;if(temp !=0xF0){delay10ms(1);temp=P2;temp=0xF0;if(temp !=0xF0){? switch(temp) { case 0xE0: key=7;break; case 0xd0: key=8;break; case 0xb0: key=9;break; case 0x70: key=16;break;?//“除号” }?}}P2=0xFF;P2_1=0;temp=P2;temp=0xF0;if(temp !=0xF0){delay10ms(1);temp=P2;temp=0xF0;if(temp !=0xF0){ switch(temp) { case 0xE0: key=4;break; case 0xd0: key=5;break; case 0xb0: key=6;break; case 0x70: key=15;break;//“乘号” }}}P2=0xFF;P2_2=0;temp=P2;temp=0xF0;if(temp !=0xF0){delay10ms(1);temp=P2;temp=0xF0;if(temp !=0xF0){? switch(temp) { case 0xE0: key=1;break; case 0xd0: key=2;break; case 0xb0: key=3;break; case 0x70: key=14;break;//减号 }}}P2=0xFF;P2_3=0;temp=P2;temp=0xF0;if(temp !=0xF0){delay10ms(1);temp=P2;temp=0xF0;if(temp !=0xF0){? switch(temp) { case 0xE0: key=11;break;//复位 ON/C case 0xd0: key=10;break;//0 case 0xb0: key=12;break;//等号 case 0x70: key=13;break;//加号 }}}}//-------数据发送子程序----------------void send(unsigned char addr,unsigned char dat){?unsigned char ADS,i,j;?LOAD=0;?i=0;?while(i16)?{?if(i8) ADS=addr;?else?ADS=dat;?for(j=8;j=1;j--)?{?DIN=ADS0x80;?ADS=1;?CLK=1;?CLK=0;?}?i+=8;?}?LOAD=1;}//--------数据显示子程序--------------------void display(unsigned int n){?unsigned char n2;?unsigned char n3;?unsigned char n4;?unsigned char n5;?if(n/10000==0(n%10000)/1000==0((n%10000)%1000)/100==0(((n%10000)%1000)%100)/10==0)???????????????????????? //灭掉不必要的“0” {n2=0x0f;n3=0x0f;n4=0x0f;n5=0x0f;} else if(n/10000==0(n%10000)/1000==0((n%10000)%1000)/100==0(((n%10000)%1000)%100)/10
文档评论(0)