完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
独立键盘设置加减乘除无法实现
求助独立部门c语言写法 #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long ***it key4=P3^5; ***it key3=P3^4; ***it key2=P3^3; ***it key1=P3^2; unsigned char code table[]={ 0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0}; ulong dat; //?? ulong datA; //???? uchar addflag; //????? uchar subflag; //????? uchar mulflag; //????? uchar divflag; //????? uchar overflow; //????? uchar clrflag; //??????? uchar illegal; //???????? uchar keynum; //???? uchar keycode; //??IO???? uchar scanok; uchar checkok; void delay_ms(uint z) //1ms????? { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void scankeyboard() //scankeyboard()??(??????) { //????????? uchar a,b; P1=0x0f; keycode=P1; if(keycode!=0x0f) { delay_ms(10); //???????? a=keycode; P1=0xf0; b=P1; keycode=a|b; while(P1!=0xf0); delay_ms(10);//???????? P1=keycode; scanok=1;//???????scanok?1??? } } void checkkeycode(void) { if(key1==0) {delay_ms(10); if(key1==0) { keynum=10 ; while(key1==0)delay(); delay(); } } if(key2==0) { delay_ms(10); if(key2==0) { keynum=11 ; while(key1==0)delay(); delay(); checkok=1; } } if(key3==0) { delay_ms(10); if(key3==0) { keynum=12 ; while(key1==0)delay(); delay(); } } if(scanok) //???????,???????? { scanok=0; //scanok??????????? switch(keycode) //????????????????... { case 0xee: keynum=1 ;break; case 0xde: keynum=2 ;break; case 0xbe: keynum=3 ;break; //??? case 0xed: keynum=4 ;break; case 0xdd: keynum=5 ;break; case 0xbd: keynum=6 ;break; case 0xeb: keynum=7 ;break; case 0xdb: keynum=8 ;break; case 0xb7: keynum=14 ;break; // = case 0xe7: keynum=15 ;break; return keynum; //?? } checkok=1; } } void datpros(void) //???????? { if(keynum==15) //???15 ??????? ???? { dat=0; } else //????????? ???? ?? ??? { if(clrflag) //?????1,?????? { dat=0; clrflag=0; //???????? } dat=dat*10+(ulong)keynum; //???????????????????"1","2","3"???????"123" if(dat>1000000000) overflow=1; //???????65535(????int???,???65535)????????1,???????????"EEEEEEE" if(divflag&&!dat) illegal=1; //?????????,??????1,??????? } } void add(void) { addflag++; //?????1??? subflag=mulflag=divflag=0; //???????????(?????????) clrflag=1; //?????1,(??????,????????,???????????????????????) if(addflag>1) //???????? { //???????????????????? dat=dat+datA; //??? datA=dat; //???,????????? } //??:????"1+2+3"?,???????,?????1+2???? else datA=dat; //??????,?????????????(?????????dat?????) } void sub(void) { subflag++; addflag=mulflag=divflag=0; clrflag=1; if(subflag>1) //???? { dat=datA-dat; datA=dat; } else datA=dat; } void mul(void) { mulflag++; addflag=subflag=divflag=0; clrflag=1; if(mulflag>1) //?? { dat=datA*dat; datA=dat; } else datA=dat; } void div(void) { divflag++; addflag=subflag=mulflag=0; clrflag=1; if(divflag>1) { dat=datA/dat; datA=dat; } else datA=dat; } void equ(void) { if(addflag) //??????????? { dat=dat+datA; //?????dat(??????dat?????) } if(subflag) { dat=datA-dat; } if(mulflag) { dat=datA*dat; } if(divflag) { dat=datA/dat; } addflag=subflag=mulflag=divflag=0; //?????????????????????????? } void display(void) { uchar ge=0,shi=0,bai=0,qian=0,wan=0,shiwan=0,baiwan=0,qianwan=0; if(!overflow&&!illegal) { qian=dat/1000; bai=(dat%1000)/100; shi=(dat%100)/10; ge=dat%10; P0=table[ge]; P2=0x7f; delay_ms(2); P0=table[shi]; P2=0xbf; //???? delay_ms(2); P0=table[bai]; P2=0xdf; //???? delay_ms(2); P0=table[qian]; P2=0xef; //????? delay_ms(2); P0=0xff; } else { P0=table[0]; P2=0x7f; delay_ms(2); } } void calculate_handle(void)//??????? { if(checkok)//????????????????? { checkok=0;//???????.. switch (keynum)//???+,-,*,/,=?????????? { case 10 : add(); break; //?????"+",???????? case 11 : sub(); break; //?????"-",???????? case 12 : mul(); break; //?????"*",???????? case 13 : div(); break; //????,???(????),?????????? case 14 : equ(); break; default : datpros(); //????,???(????),?????????? } } } void main(void) { P0=0xff; while(1) { scankeyboard(); checkkeycode(); calculate_handle(); display(); } } |
|
相关推荐
2个回答
|
|
注释咋都是问号
|
|
|
|
按键都能采集回来吗
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
846 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
879 浏览 0 评论
2714 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2332 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1721 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5900 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 10:20 , Processed in 0.490225 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号