为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机矩阵计算机程序

2017-12-21 12页 doc 25KB 39阅读

用户头像

is_633808

暂无简介

举报
单片机矩阵计算机程序单片机矩阵计算机程序 /* 1 2 3 +(10) 4 5 6 -(11) 7 8 9 *(12) '='(15) 0 AC(13) key(14) 这是键盘功能表 */ #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7...
单片机矩阵计算机程序
单片机矩阵计算机程序 /* 1 2 3 +(10) 4 5 6 -(11) 7 8 9 *(12) '='(15) 0 AC(13) key(14) 这是键盘功能表 */ #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar b[6]={0,0,0,0,0,0}; int cal1=0,cal2=0; //计算器的两个运算操作数,cal1为被减数或者 被加数 int result=0; //运算结果 uchar sin=3,key=255; //运算符号 0:+ 1:- 2:无意义 void delayms(uint x) //延时函数 { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void display(key) //数码管显示函数 { dula=1; P0=b[0]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(1); dula=1; P0=a[b[1]]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(1); dula=1; P0=a[b[2]]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delayms(1); dula=1; P0=a[b[3]]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delayms(1); dula=1; P0=a[b[4]]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delayms(1); dula=1; P0=a[b[5]]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delayms(1); } uchar skey()//键盘扫描函数 { uchar temp,key=255; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:key=1;break; case 0xde:key=2;break; case 0xbe:key=3;break; case 0x7e:key=10;break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:key=4;break; case 0xdd:key=5;break; case 0xbd:key=6;break; case 0x7d:key=11;break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:key=7;break; case 0xdb:key=8;break; case 0xbb:key=9;break; case 0x7b:key=12;break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:key=15;break; case 0xd7:key=0;break; case 0xb7:key=13;break; case 0x77:key=14;break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return key; } void dis_change(int dis) //显示数据更新函数,参数为待显示函数 { if(dis<0) { dis=-dis; b[0]=0x40; } else b[0]=0x00; b[1]=(dis/10000)%10; b[2]=(dis/1000)%10; b[3]=(dis/100)%10; b[4]=(dis/10)%10; b[5]=dis%10; if(dis<10000) b[1]=0x40; if(dis<1000) b[2]=0x40; if(dis<100) b[3]=0x40; if(dis<10) b[4]=0x40; } void chukey(uchar key) //键盘处理函数 { if(key<10) //按下0~9数字键 { if(sin<3) { cal2=cal2*10+key;//将输入的数据存入cal2 dis_change(cal2); } else { cal1=cal1*10+key; dis_change(cal1); } } else // 按下了控制键 { switch(key) { case 10:sin=0;break;//'+' case 11:sin=1;break;//'-' case 12:sin=2;break;//'*' case 13:cal1=cal2=0;//操作清零 result=0; sin=3; dis_change(0); break; case 15: //'=' { switch(sin) { case 0:result=cal1+cal2; dis_change(result);break; case 1:result=cal1-cal2; dis_change(result);break; case 2:result=cal1*cal2; dis_change(result);break; case 3: break; default :break; } cal1=cal2=0; result=0; sin=3; break; } default:break; } } } void main() //主函数调用 { int a; dis_change(0); while(1) { a=skey(); if(a!=255) { if(a==14) { b[5]=0x40; b[4]=0x40; b[3]=0x40; b[2]=0x40; b[1]=0x40; b[0]=0x00; } else chukey(a); } display(key); } }
/
本文档为【单片机矩阵计算机程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索