|
這是我本人做的一探究性學習的記錄,方便新人學習,
代碼有備注,超級詳細,思路清晰。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ圖片20180613090825.png (7.05 KB, 下載次數: 119)
下載附件
2018-6-13 09:22 上傳
單片機程序源碼:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define GPIO_KEY P1
- #define weixuan P2
- //0~F的共陽數碼管段碼,最后一個是黑屏
- const uchar SEG_CODE[] =
- { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
- 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF
- };
- sbit wei1=P2^0;
- sbit wei2=P2^1;
- uchar ge,shi,KeyValue,j;
- /*****延時函數*****/
- void delay1ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=112;y>0;y--); //12M晶振下,延時1MS
- }
- /*****顯示函數*****/
- void xianshi(uchar k)
- {
- ge=k%10; //個位
- shi=k/10; //十位
- if(k>9)
- {
- weixuan=0x02;
- P0=SEG_CODE[ge];//個位段選
- delay1ms(10);
- weixuan=0x01;
- P0=SEG_CODE[shi];//十位段碼,顯示
- delay1ms(10);
- }
- else
- {
- weixuan=0x02;
- P0=SEG_CODE[ge];
- delay1ms(10);
- }
- }
- /***鍵盤掃描函數***/
- uchar keyscan()
- {
- char a=0;
- GPIO_KEY=0x0f;
- if(GPIO_KEY!=0x0f)
- {
- delay1ms(10);
- if(GPIO_KEY!=0x0f)//
- {
- GPIO_KEY=0x0f; //
- switch(GPIO_KEY)
- {
- case(0x07):KeyValue=0;break; //第一行
- case(0x0b):KeyValue=1;break; //第二行
- case(0x0d):KeyValue=2;break; //第三行
- case(0x0e):KeyValue=3;break; //第四行
- }
- GPIO_KEY=0xf0;
- switch(GPIO_KEY)
- {
- case(0x70):KeyValue=KeyValue;break; //0-3
- case(0xb0):KeyValue=KeyValue+4;break; //4-7
- case(0xd0):KeyValue=KeyValue+8;break; //8-11
- case(0xe0):KeyValue=KeyValue+12;break; //12-15
- }
- while((GPIO_KEY!=0x0f)&&(a<10))
-
- {
- delay1ms(1);
- a++;
- }
- a=0;
- }
- }
- return KeyValue;
- }
- /*****主函數*******/
- void main()
- {
- uchar b;
- while(1)
- {
- b=keyscan();
- xianshi(b);
- }
- }
復制代碼
QQ圖片20180613090240.png (25.93 KB, 下載次數: 127)
下載附件
2018-6-13 09:24 上傳
全部資料51hei下載地址:
4X4鍵盤數碼管顯示.rar
(65.04 KB, 下載次數: 117)
2018-6-13 09:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|