|
單片機(jī)獨(dú)立按鍵控制LED數(shù)碼管顯示數(shù)字及左移
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (98.19 KB, 下載次數(shù): 36)
下載附件
2022-11-29 03:15 上傳
1.png (27.1 KB, 下載次數(shù): 26)
下載附件
proteus仿真
2022-11-28 21:53 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- disp_DK[]= {0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8,0x80,0x90,0xbf};
- uchar find[]={0,0,0,0};
- void Delay_ms(uint xms)
- {
- uchar t;
- while (xms--)
- for(t=0;t<120;t++);
- }
- uchar keychuli()
- {
- uchar key;
- P1=0xff;
- key=P1;
- key=~key;
- key=key&0xff;
- return key;
- }
- uchar keyscan()
- {
- uchar keys,keyzhi;
- keys= keychuli();
- if(keys!=0)
- {Delay_ms(1);
- Delay_ms(1);
- keys=keychuli();
- if(keys!=0)
- {
- keyzhi=keys;
- while(keys!=0)
- {
- Delay_ms(1) ;
- keys=keychuli();
- }
- }
- }
- else keyzhi=0;
- return keyzhi;
- }
-
- void display()
- {
- uchar i, k, aa=0x08;
- for(i=0;i<4;i++)
- {
- P2=aa;
- k=find[i];
- P0=disp_DK[k];
- aa=_cror_(aa,1) ;
- Delay_ms(1);
- P0=0xff;
- }
- }
- void dischuli()
- {
- find[3]=find[2];
- find[2]=find[1];
- find[1]=find[0];
- }
- void keyaa()
- {
- find[0]=1;
- }
- void keybb()
- {
- find[0]=2;
- }
- void keycc()
- {
- find[0]=3;
- }
- void keydd()
- {
- find[0]=4;
- }
- void keyee()
- {
- find[0]=5;
- }
- void keyff()
- {
- find[0]=6;
- }
- void keygg()
- {
- find[0]=7;
- }
- void keyhh()
- {
- find[0]=8;
- }
- void main(void)
- { uchar keys;
- while(1)
- {
- display();
- keys=keyscan();
- if (keys!=0) {dischuli();}
- switch(keys)
- {case 0x00:break;
- case 0x01:keyaa();break;
- case 0x02:keybb();break;
- case 0x04:keycc();break;
- case 0x08:keydd();break;
- case 0x10:keyee();break;
- case 0x20:keyff();break;
- case 0x40:keygg();break;
- case 0x80:keyhh();break;
- default:break;
- }
- }
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
LED數(shù)碼管顯示.zip
(91.66 KB, 下載次數(shù): 29)
2022-11-28 21:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|