中科因仑“3+1”工程特种兵精英论坛
标题:
動態掃描 數碼管閃動
[打印本页]
作者:
惨淡的人生
时间:
2016-6-6 18:53
标题:
動態掃描 數碼管閃動
用數碼管做了個學習板 原意是按按鍵k20 數字加一 按按鍵k21數字減一 但發現按鍵長按的時候 數碼管沒有顯示
只有鬆開按鍵 數碼管才顯示正確的數字 快速按動按鍵 數碼管顯示的數字在閃動 請各位幫忙看看程序那裏出錯了
謝謝
#include<reg52.h>
#include<intrins.h>
unsigned char code dsp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; //0,1,2,3,4,5,6,7,8,9
sbit led=P3^7;
sbit beep=P3^4;
sbit k20=P2^7;
sbit k21=P2^6;
unsigned int num;
void delayms(unsigned int time); //長延時
void delayms1(unsigned char tt); //短延時
void beep1(); //開啓蜂鳴器
void display(unsigned int number); //顯示數字
void scankey(); //鍵盤掃描
main()
{
while(1)
{
scankey();
display(num);
}
}
void delayms(unsigned int time)
{
unsigned int n;
unsigned int m;
while(time>0)
{
for(n=0;n<300;n++)
{
for(m=0;m<300;m++);
}
time--;
}
}
void beep1()
{
beep=0;
delayms(2);
beep=1;
}
void display(unsigned int number)
{
unsigned char bai,shi,ge;
bai=number/100; //分離數字
shi=number%100/10;
ge=number%10;
P2=0xfe; //百位顯示打開
P0=dsp[bai]; //顯示百位的數字
delayms1(10);
P0=0x00; //消隱
P2=0xfb; //十位顯示打開
P0=dsp[shi];
delayms1(10);
P0=0x00;
P2=0xf7; //個位顯示打開
P0=dsp[ge];
delayms1(10);
P0=0x00;
}
void scankey()
{
if (k20==0) //數字加
{
delayms(1);
if(k20==0)
{
num++;
if(num==1000)
{
num=0;
}
while(!k20);
beep1();
}
}
if(k21==0) //數字減
{
delayms(1);
if(k21==0)
{
if(num==0)
{
num=1000;
}
num--;
while(!k21);
beep1();
}
}
}
void delayms1(unsigned char tt)
{
unsigned char n=200;
while(tt>0)
{
while(n>0)
{
n--;
}
tt--;
}
}
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4