《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
uchar i; for(i=0;i<8;i++) {
P0=0xff;
P0=DSY_CODE[Display_Buffer[i]]; P2=DSY_Index[i]; DelayMS(2); } } //主程序 void main() {
uchar i,Key_NO,Key_Counts=0; P0=0xff; P1=0xff; P2=0x00; while(1) {
Show_Count_ON_DSY(); P1=0xff; Key_NO=P1;
//P1口按键状态分别为K1-0xfe, switch(Key_NO)
31
K2-0xfd,K3-0xfb 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
{
case 0xfe: Key_Counts++;
if(Key_Counts>8) Key_Counts=8;
Display_Buffer[Key_Counts-1]=Key_Counts; break; case
break;
case 0xfb: Display_Buffer[0]=0;
for(i=1;i<8;i++) Display_Buffer[i]=10; Key_Counts=0; }
//若键未释放则仅刷新显示,不进行键扫描 while(P1!=0xff) Show_Count_ON_DSY(); } }
15 K1-K4 控制数码管加减演示
/* 名称:K1-K4 控制数码管加减演示
32
0xfd:
if(Key_Counts>0)Display_Buffer[--Key_Counts]=10;
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
说明:按下K1后加1计数,按下K2后减1计数,按下K3后清零。 */
#include
8,0x80,0x90,0xff}; //待显示的3位缓冲 uchar Num_Buffer[]={0,0,0}; //按键代码,按键计数
uchar Key_Code,Key_Counts=0; //延时
void DelayMS(uint x) { uchar i;
while(x--) for(i=0;i<120;i++); } //显示函数
void Show_Counts_ON_DSY()
33
code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
{
uchar i,j=0x01;
Num_Buffer[2]=Key_Counts/100; Num_Buffer[1]=Key_Counts/10; Num_Buffer[0]=Key_Counts; for(i=0;i<3;i++) {
j=_cror_(j,1); P0=0xff;
P0=DSY_CODE[Num_Buffer[i]]; P2=j; DelayMS(1); } } //主程序 void main() { uchar i; P0=0xff; P1=0xff; P2=0x00; Key_Code=0xff; while(1)
34
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
{
Show_Counts_ON_DSY(); P1=0xff; Key_Code=P1;
//有键按下时,数码管刷新显示30次,该行代码同时起到延时作用 if(Key_Code!=0xff)
for(i=0;i<30;i++) Show_Counts_ON_DSY(); switch(Key_Code) {
case 0xfe: if(Key_Counts<255) Key_Counts++; break;
case 0xfd: if(Key_Counts>0) Key_Counts--; break;
case 0xfb: Key_Counts=0; }
Key_Code=0xff; } }
16 4X4矩阵键盘控制条形LED显示
35