|
實(shí)現(xiàn)兩位數(shù)相加,這里我用到了矩陣鍵盤(pán)和數(shù)碼管以及獨(dú)立按鍵,獨(dú)立按鍵控制加法符號(hào)和等于符號(hào),矩陣鍵盤(pán)為0-F這16個(gè)數(shù),先寫(xiě)十位再寫(xiě)各位,數(shù)碼管顯示,最后,計(jì)算出結(jié)果以后再利用數(shù)碼管顯示結(jié)果,同時(shí)蜂鳴器響。
注意,我用的芯片是stc89c52
單片機(jī)源程序如下:
- #include"reg52.h"
- //兩位數(shù)。!
- int i;
- char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
- int number_1,number_2;int m=20;int value;int numberr[5];int g=1;
- sbit a=P2^2;
- sbit b=P2^3;
- sbit c=P2^4;
- int n=0;
- int my;
- int uu=1;
- sbit beep=P1^5;
- int din_K1=0;
- int din_K3=0;
- int yy=990;
- char mm_1;
- char bb;
- char mm_2;
- sbit jia=P3^1;
- sbit deng=P3^2;
- ////////////////
- void Init()
- {
- SCON=0X50; //設(shè)置為工作方式1
- TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
- PCON=0X80; //波特率加倍
- TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
- TL1=0XF3;
- ES=1; //打開(kāi)接收中斷
- EA=1; //打開(kāi)總中斷
- TR1=1; //打開(kāi)計(jì)數(shù)器
- }
- //////////////
- void delay(int d)
- {
- while(d)
- {
- d--;
- }
- }
- void check()
- { int z;
- P1=0x0f;
- if(P1!=0x0f)//讀取按鍵是否按下
- {
- delay(3000);//延時(shí)10ms進(jìn)行消抖
- if(P1!=0x0f)//再次檢測(cè)鍵盤(pán)是否按下
- {
- //測(cè)試列
- P1=0X0F;
- switch(P1)
- {
- case(0X07): value=0;break;
- case(0X0b): value=1;break;
- case(0X0d): value=2;break;
- case(0X0e): value=3;break;
- }
- //測(cè)試行
- P1=0XF0;
- switch(P1)
- {
- case(0X70): value=value;break;
- case(0Xb0): value=value+4;break;
- case(0Xd0): value=value+8;break;
- case(0Xe0): value=value+12;break;
- }
- while((z<50)&&(P1!=0xf0)) //檢測(cè)按鍵松手檢測(cè)
- {
- delay(1000);
- z++;
- }
- din_K1=1;
- din_K3=1;
- n++;
- numberr[n]=value;
-
-
- }
- }
-
- }
- void oror()
- {
- if(jia==0)
- {
- delay(1000);
- if(jia==0)
- {
- din_K1=0;
-
- }
- }
-
-
- }
- void end()
- {
- if(deng==0||uu==0)
- {
- delay(1000);
- if(deng==0||uu==0)
- {
- din_K3=0;
- g=0;
- value=numberr[1]*10+numberr[2]+numberr[3]*10+numberr[4];
- number_1=value/10;
- number_2=value%10;
- }
- }
-
- }
-
- void main()
- {
- Init();
- while(g)
- {
- check();
-
- while(din_K1&&din_K3&&uu)
- {
- switch(n%2)
- {
- case 0:c=0;b=0;a=0;P0=smgduan[value];delay(1200);P0=smgduan[0];c=0;b=0;a=1;P0=smgduan[numberr[n-1]];delay(1200);P0=smgduan[0]; break;
- case 1:c=0;b=0;a=1;P0=smgduan[value];delay(1200);P0=smgduan[0];break;
-
- }
- break;
- }
- // oror();
- end();
-
-
-
-
- }
- while(yy)
- {
- beep=~beep;
- delay(10);
- yy--;
- }
- while(1)
- { int p=0;
- for(p=0;p<2;p++)
- {
- switch(p)
- {
- case 0:c=0;b=0;a=0;P0=smgduan[number_2];delay(1000);P0=smgduan[0];break;
- case 1:c=0;b=0;a=1;P0=smgduan[number_1];delay(1000);P0=smgduan[0];break;
- }
- }
- }
-
-
- }
- void Usart() interrupt 4
- {
- bb=SBUF;
- RI=0;
- if(bb==0x3d)
- { uu=0;
-
- }
-
- else
- {
- RI=0;
- mm_1=number_1+0x30;
- mm_2=number_2+0x30;
- SBUF=mm_1;
- while(!TI);
- TI=0;
- SBUF=mm_2;
- while(!TI);
- TI=0;
- }
- // RI=0;
- // SBUF=0x30;;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
- // while(!TI); //等待發(fā)送數(shù)據(jù)完成
- // TI=0; //清除發(fā)送完成標(biāo)志位
- }
復(fù)制代碼
所有資料51hei提供下載:
計(jì)算1111111111器——2位數(shù)相加.rar
(26.28 KB, 下載次數(shù): 30)
2018-5-7 01:37 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|