|
注意:此程序需要用到單片機(jī)74H138模塊,才能通過(guò)獨(dú)立鍵盤(pán)控制動(dòng)態(tài)數(shù)碼管
- #include<reg52.h> //此文件中定義了單片機(jī)的一些特殊功能
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1=P1^0; //定義 P10 口是 k1
- sbit k2=P1^1; //定義 P11 口是 k2
- sbit k3=P1^2; //定義 P12 口是 k3
- sbit k4=P1^3; //定義 P13 口是 k4
- sbit k5=P1^4; //定義 P14 口是 k5
- sbit k6=P1^5; //定義 P15 口是 k6
- sbit k7=P1^6; //定義 P16 口是 k7
- sbit k8=P1^7; //定義 P17 口是 k8
- sbit LSA=P0^0;
- sbit LSB=P0^1;
- sbit LSC=P0^2;
- uchar code smgduan[17]={0x06,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 顯 示0~F 的值
- void delay(uint i)
- {
- while(i--);
- }
- void keypros1()
- {
- if(k1==0) //檢測(cè)按鍵 K1 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 10ms
- if(k1==0) //再次判斷按鍵是否按下
- {
- LSA=0;LSB=0;LSC=0;//顯示第 0 位;
- }
- while(!k1); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros2()
- {
- if(k2==0) //檢測(cè)按鍵 K2 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k2==0) //再次判斷按鍵是否按下
- {
- LSA=1;LSB=0;LSC=0;//顯示第 1 位
- }
- while(!k2); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros3()
- {
- if(k3==0) //檢測(cè)按鍵 K3 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k3==0) //再次判斷按鍵是否按下
- {
- LSA=0;LSB=1;LSC=0;//顯示第 2 位
- }
- while(!k3); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros4()
- {
- if(k4==0) //檢測(cè)按鍵 K4 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k4==0) //再次判斷按鍵是否按下
- {
- LSA=1;LSB=1;LSC=0; //顯示第 3 位
- }
- while(!k4); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros5()
- {
- if(k5==0) //檢測(cè)按鍵 K5 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k5==0) //再次判斷按鍵是否按下
- {
- LSA=0;LSB=0;LSC=1;//顯示第 4 位
- }
- while(!k5); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros6()
- {
- if(k6==0) //檢測(cè)按鍵 K6 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k6==0) //再次判斷按鍵是否按下
- {
- LSA=1;LSB=0;LSC=1;//顯示第 5 位
- }
- while(!k6); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros7()
- {
- if(k7==0) //檢測(cè)按鍵 K7 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k7==0) //再次判斷按鍵是否按下
- {
- LSA=0;LSB=1;LSC=1;//顯示第 6 位
- }
- while(!k7); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void keypros8()
- {
- if(k8==0) //檢測(cè)按鍵 K8 是否按下
- {
- delay(1000); //消除抖動(dòng) 一般大約 1ms
- if(k8==0) //再次判斷按鍵是否按下
- {
- LSA=1;LSB=1;LSC=1;//顯示第 7 位
- }
- while(!k8); //檢測(cè)按鍵是否松開(kāi)
- }
- }
- void DigDisplay()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
- {
- case(0):
- keypros1();
- break;//顯示第 0 位
- case(1):
- keypros2();
- break;//顯示第 1 位
- case(2):
- keypros3();
- break;//顯示第 2 位
- case(3):
- keypros4();
- break;//顯示第 3 位
- case(4):
- keypros5();
- break;//顯示第 4 位
- case(5):
- keypros6();
- break;//顯示第 5 位
- case(6):
- keypros7();
- break;//顯示第 6 位
- case(7):
- keypros8();
- break;//顯示第 7 位
- }
- P2=smgduan[i];//發(fā)送段碼
- delay(10000); //間隔一段時(shí)間掃描
- P2=0x00;//消隱
- }
- }
- void main()
- {
- while(1)
- {
- DigDisplay(); //數(shù)碼管顯示函數(shù)
- }
- }
復(fù)制代碼
|
|