《023、 模拟计算器数字输入及显示》由会员分享,可在线阅读,更多相关《023、 模拟计算器数字输入及显示(8页珍藏版)》请在金锄头文库上搜索。
1、23 模拟计算器数字输入及显示 1 实验任务 (1 开机时,显示“0” (2 第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。 2 电路原理图 图4.23.1 3 系统板上硬件连线 (1 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2 把“单片机系统“区域中的P3.0P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1C4R1R4端口上; (3 把“单片机系统”区域中的P0.0P0.7端口用8芯排线连接到“动态数码显示”区域中的AH端口上;
2、 (4 把“单片机系统:区域中的P2.0P2.7端口用8芯排线连接到“动态数码显示”区域中的S1S8端口上; 4 相关程序设计内容 (1 行列式键盘输入及按键功能设定; (2 动态数码显示; (3 数码显示方式处理;5 汇编源程序(略)6 C语言源程序#include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;unsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7,0
3、xef,0xdf,0xbf,0x7f;unsigned char dispbuf8=0,16,16,16,16,16,16,16;unsigned char dispbitcount;unsigned char temp;unsigned char i,j;unsigned char key;unsigned char keypos;bit alarmflag;void change(unsigned char *p,unsigned char count)while(count0)*(p+count)=*(p+count-1);count-;void main(void)TMOD=0x01;
4、TH0=(65536-4000) / 256;TL0=(65536-4000) % 256;TR0=1;ET0=1;EA=1;while(1)P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break
5、;case 0x07:key=10;break;if (key=0) & (key10)keypos+;if(keypos0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;if (key=0) & (key10)keypos+;if(keypos0;i-)for(j=200
6、;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;if (key=0) & (key10)keypos+;if(keypos0;i-)for(j=200;j0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;sw
7、itch(temp)case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;if (key=0) & (key10)keypos+;if(keypos8)change(dispbuf,keypos);dispbuf0=key;elsekeypos=8;alarmflag=1;temp=P3;P1_0=P1_0;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp=temp & 0x0f;alarmflag=0;void t0(void) interrupt 1 using 0TH0=(65536-4000) / 256;TL0=(65536-4000) % 256;P0=dispcodedispbufdispbitcount;P2=dispbitcodedispbitcount;dispbitcount+;if (dispbitcount=8)dispbitcount=0;if (alarmflag=1)P1_1=P1_1;