實現兩位數相加,這里我用到了矩陣鍵盤和數碼管以及獨立按鍵,獨立按鍵控制加法符號和等于符號,矩陣鍵盤為0-F這16個數,先寫十位再寫各位,數碼管顯示,最后,計算出結果以后再利用數碼管顯示結果,同時蜂鳴器響。
注意,我用的芯片是stc89c52
單片機源程序如下:
- #include"reg52.h"
- //兩位數!!!
- 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; //設置為工作方式1
- TMOD=0X20; //設置計數器工作方式2
- PCON=0X80; //波特率加倍
- TH1=0XF3; //計數器初始值設置,注意波特率是4800的
- TL1=0XF3;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- }
- //////////////
- void delay(int d)
- {
- while(d)
- {
- d--;
- }
- }
- void check()
- { int z;
- P1=0x0f;
- if(P1!=0x0f)//讀取按鍵是否按下
- {
- delay(3000);//延時10ms進行消抖
- if(P1!=0x0f)//再次檢測鍵盤是否按下
- {
- //測試列
- P1=0X0F;
- switch(P1)
- {
- case(0X07): value=0;break;
- case(0X0b): value=1;break;
- case(0X0d): value=2;break;
- case(0X0e): value=3;break;
- }
- //測試行
- 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)) //檢測按鍵松手檢測
- {
- 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;;//將接收到的數據放入到發送寄存器
- // while(!TI); //等待發送數據完成
- // TI=0; //清除發送完成標志位
- }
復制代碼
所有資料51hei提供下載:
計算1111111111器——2位數相加.rar
(26.28 KB, 下載次數: 30)
2018-5-7 01:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|