欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
為什么單片機數碼管電子鐘按鍵是黑一下屏?
[打印本頁]
作者:
咻咻修
時間:
2018-8-7 23:38
標題:
為什么單片機數碼管電子鐘按鍵是黑一下屏?
我的數碼管電子鐘什么都沒問題了,可就是按鍵調時間時,一按下按鍵整個頻就黑了,松開又亮了,而且功能也都實現了,就是按下按鍵時會黑一下,請問各位大佬是怎么回事呢???????我在板子上實現的,應該是我的程序不完善,下面是我的程序。。。。。希望各位大佬幫忙解答下。。。。。
單片機源程序如下:
#include<reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 ms0;
u8 sec;
u8 min;
u8 hour;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
void delay(u8 i)
{
i--;
}
void keyscan();
void display();
void main()
{
P0=0X00;
TMOD|=0X01;
TH0=(65536-49960)/256;
TL0=(65536-49960)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display();
}
}
void display()
{
while(1)
{
LSA=0;LSB=0;LSC=0;
P0=smgduan[sec%10];
delay(2);
P0=0x00;
LSA=1;LSB=0;LSC=0;
P0=smgduan[sec/10];
delay(2);
P0=0x00;
LSA=0;LSB=1;LSC=0;
P0=0x40;
delay(2);
P0=0x00;
LSA=1;LSB=1;LSC=0;
P0=smgduan[min%10];
delay(2);
P0=0x00;
LSA=0;LSB=0;LSC=1;
P0=smgduan[min/10];
delay(2);
P0=0x00;
LSA=1;LSB=0;LSC=1;
P0=0x40;
delay(2);
P0=0x00;
LSA=0;LSB=1;LSC=1;
P0=smgduan[hour%10];
delay(2);
P0=0x00;
LSA=1;LSB=1;LSC=1;
P0=smgduan[hour/10];
delay(2);
P0=0x00;
}
}
void T0_time() interrupt 1
{
TH0=(65536-49960)/256;
TL0=(65536-49960)%256;
ms0++;
if(ms0>=20)
{
ms0=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=20)
hour=0;
}
}
}
keyscan();
}
/*void digdisplay()
{
switch(a)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=0;LSB=0;LSC=1;break;
case(2):
LSA=0;LSB=1;LSC=0;break;
case(3):
LSA=0;LSB=1;LSC=1;break;
case(4):
LSA=1;LSB=0;LSC=0;break;
case(5):
LSA=1;KSB=0;LSC=1;break;
case(6):
LSA=1;LSB=1;LSC=0;break;
case(7):
LSA=1;LSB=1;LSC=1;break;
}
} */
void keyscan()
{
if(k1==0)
{
delay(5);
if(k1==0)
{
min--;
if(min>=60)
min=0;
}
while(!k1);
}
if(k2==0)
{
delay(5);
if(k2==0)
{
min++;
if(min>=60)
min=0;
}
while(!k2);
}
if(k3==0)
{
delay(5);
if(k3==0)
{
hour--;
if(hour>=24)
hour=0;
}
while(!k3);
}
if(k4==0)
{
delay(5);
if(k4==0)
{
hour++;
if(hour>=24)
hour=0;
}
while(!k4);
}
}
復制代碼
所有資料51hei提供下載:
數碼管.zip
(24.99 KB, 下載次數: 5)
2018-8-7 23:36 上傳
點擊文件名下載附件
作者:
wulin
時間:
2018-8-8 06:43
你的按鍵掃描程序使用while(!k1)死循環判斷松手,并且按鍵掃描程序被放在定時器中斷中,在此期間內單片機任何工作都停止等待松手。
作者:
HC6800-ES-V2.0
時間:
2018-8-8 08:13
看了你的按鍵函數,就知道是你的程序問題了。
第一:為什么數碼管會黑呢?因為沒有執行顯示部分的程序啊。
第二:為什么沒有執行顯示部分的程序呢?因為你按鍵程序用 while(!k1);占住了程序的執行啊——只要你不松手,數碼管就會一直是黑的。
按鍵的松手消抖程序,不應該這樣寫,可能以前你都是這樣寫的,并且從來沒有碰到問題,因為沒有碰到這樣的需要適時顯示的情況。
這樣寫比較好:
for (i=0;((i<10)&&(k1==0));i++)
{
Delay1ms();
}
作者:
ahshmj
時間:
2018-8-8 10:03
你可以使用“顯示”函數來延時就不會這樣了。根據顯示函數的運行占用時間,確定循環幾次,滿足延時。
作者:
人中狼
時間:
2018-8-8 13:04
按鍵掃描不要放在定時器中斷里,放在主程序的循環里,顯示程序應該放在定時器里,這樣不論按鍵掃描或其他的程序死循環,只要定時器正常運行,就都能顯示了
作者:
advance
時間:
2018-8-8 13:56
按鍵程序有問題,你按住按鍵程序就死在那,當然不執行顯示程序了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1