23. 模拟计算器数字输入及显示_计算器不能输入数字
23. 模拟计算器数字输入及显示由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“计算器不能输入数字”。
23. 模拟计算器数字输入及显示
1. 实验任务
(1. 开机时,显示“0”
(2. 第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。
2. 电路原理图
图4.23.1 3. 系统板上硬件连线
(1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
(2. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;(3. 把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;
(4. 把“单片机系统:区域中的P2.0-P2.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; 4. 相关程序设计内容
(1. 行列式键盘输入及按键功能设定;(2. 动态数码显示;(6#include 3..
数
C
码
显语
示
言
方
式源
处
程
理
; 序
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};unsigned unsigned unsigned unsigned unsigned unsigned unsigned bit void { change(unsigned
char char
code
char
dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
dispbuf[8]={0,16,16,16,16,16,16,16};
char dispbitcount;
char char char char
temp;i,j;
key;keypos;alarmflag;
*p,unsigned
char
count)while(count>0){ *(p+count)=*(p+count-1);count--;} } void { TMOD=0x01;TH0=(65536-4000)TL0=(65536-4000)TR0=1;ET0=1;EA=1;
/ %
main(void)
256;256;while(1){ P3=0xff;P3_4=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=7;break;case key=8;break;case key=9;break;case key=10;break;} if((key>=0){ keypos++;if(keypos
&
&
& &&
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:(key
P3=0xff;P3_5=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=4;break;case key=5;break;case key=6;break;case key=11;break;} if {((key>=0)
& &
&
&
& &&
0x0f;
0x0f;
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:(key
P3=0xff;P3_6=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=1;break;case
&
& &
&
&
0x0f;
0x0f;
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d: key=2;break;case key=3;break;case key=12;break;} if((key>=0){ keypos++;if(keypos
P3=0xff;P3_7=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;
&&
&
& &
0x0b:
0x07:
(key
0x0f;
0x0f;
0x0f;
(temp!=0x0f)temp=temp if { temp=P3;temp=temp switch(temp){ case key=0;break;case key=13;break;case key=14;break;case key=15;break;} if((key>=0){ keypos++;if(keypos
& & && & & 0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:
(key
0x0f;
0x0f;} } } void t0(void)
interrupt{ TH0=(65536-4000)/ TL0=(65536-4000)
% P0=dispcode[dispbuf[dispbitcount]];P2=dispbitcode[dispbitcount];dispbitcount++;if { dispbitcount=0;} if { P1_1=~P1_1;} }
using
0
256;256;
(dispbitcount==8)
(alarmflag==1)