單片機(jī)C語言程序設(shè)計(jì): K1-K4控制數(shù)碼管移位、加減顯示
K1-K4 控制數(shù)碼管移位顯示
/* 名稱:K1-K4 控制數(shù)碼管移位顯示
說明:按下 K1 時(shí)加 1 計(jì)數(shù)并增加顯示位,
按下 K2 時(shí)減 1 計(jì)數(shù)并減少顯示位,
按下 K3 時(shí)清零。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段碼
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//位碼
uchar code DSY_Index[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//待顯示到各數(shù)碼管的數(shù)字緩沖(開始僅在 0 位顯示 0,其他黑屏)
uchar Display_Buffer[]={0,10,10,10,10,10,10,10};
//延時(shí)
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
void Show_Count_ON_DSY()
{
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 口按鍵狀態(tài)分別為 K1-0xfe,K2-0xfd,K3-0xfb
switch(Key_NO)
{
case 0xfe: Key_Counts++;
if(Key_Counts>8) Key_Counts=8;
Display_Buffer[Key_Counts-1]=Key_Counts;
break;
case 0xfd: if(Key_Counts>0)Display_Buffer[--Key_Counts]=10;
break;
case 0xfb: Display_Buffer[0]=0;
for(i=1;i<8;i++) Display_Buffer[i]=10;
Key_Counts=0;
}
//若鍵未釋放則僅刷新顯示,不進(jìn)行鍵掃描
while(P1!=0xff) Show_Count_ON_DSY();
}
}
[!--empirenews.page--]
K1-K4 控制數(shù)碼管加減演示
/* 名稱:K1-K4 控制數(shù)碼管加減演示
說明:按下 K1 后加 1 計(jì)數(shù),按下 K2
后減 1 計(jì)數(shù),按下 K3 后清零。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//段碼
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//待顯示的 3 位緩沖
uchar Num_Buffer[]={0,0,0};
//按鍵代碼,按鍵計(jì)數(shù)
uchar Key_Code,Key_Counts=0;
//延時(shí)
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//顯示函數(shù)
void Show_Counts_ON_DSY()
{
uchar i,j=0x01;
Num_Buffer[2]=Key_Counts/100;
Num_Buffer[1]=Key_Counts/10%10;
Num_Buffer[0]=Key_Counts%10;
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)
{
Show_Counts_ON_DSY();
P1=0xff;
Key_Code=P1;
//有鍵按下時(shí),數(shù)碼管刷新顯示 30 次,該行代碼同時(shí)起到延時(shí)作用
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;
}