① 單片機;為何LED1不閃爍,為何數碼管變化速度比一秒快(已經將晶振設為11.0592)
void time2() interrupt 3
{
TH0=(65536-45872)/256;--改成 TH1
TL0=(65536-45872)%256;--改成 TL1
……
再試。
② 單片機八個數碼管動態顯示0~8,為什麼刷新太快顯示不了
顯示了,你看不見
每一位字要點亮4~10ms,人眼才能看見
③ 單片機交通燈課程設計數碼管時間走太快了,不知道是不是代碼問題(附代碼)
單片機交通燈數碼管時間走太快了,就是代碼問題。這代碼寫的太神奇了。看程序,T0定時是50ms,那應該是中斷20次才是1秒,那個9是怎麼算的來的?這個結果就是秒計時快了。
這樣計秒非常不準確。
④ 這是一個單片機數碼管從0往上加的程序,它的頻率有點快,1秒跳2個數字,幫忙看下怎麼改一秒跳一個數
你好
把延時時間加長,就能變慢
delay7ms();
多復制幾次
⑤ 單片機為何led1不亮為何數碼管顯示速度比一秒快((晶振11.0592已經設置)
你這個定時中斷函數timer2(),有問題,interrupt 3應該是定時器1,而不是定時器0,所以TH0、TL0應該是TH1/TL1。你先改一下試試
⑥ 51單片機問題,自己弄的一個電子鍾,出現數字變化很快(秒變的很快),什麼原因,求解釋
試試下列修改:
void timer0() interrupt 1
{
TH0 = (65536 - 250) / 256;
TL0 = (65536 - 250) % 256;
tcnt++;
mstcnt++;
if(tcnt == 8) { //2毫秒定時,2毫秒刷新一次數碼管.
tcnt = 0;
P0 = anxuan[weitable[jishu]];
P2 = xunhuan[jishu];
jishu++;
if(jishu == 6) jishu = 0;
}
if(mstcnt == 40000) { //1s時.
mstcnt = 0;
second++; //秒加1
if(second == 60) {
second = 0; //秒清零.
minite++; //分加1
if(minite == 60) {
minite = 0;
hour++;
if(hour == 24) hour = 0;
}
}
weitable[0] = second % 10;
weitable[1] = second / 10;
weitable[2] = minite % 10;
weitable[3] = minite / 10;
weitable[4] = hour % 10;
weitable[5] = hour / 10;
}
}
//===============
你關鍵性的錯誤在於下一條:
if(mstcnt==40000);//1s時
注意到了嗎?末尾,多了一個分號。
⑦ 51單片機做的秒錶顯示在數碼管上比實際快
頻率是 11.0592MHz?
定時時間,不宜採用 1ms、0.5ms。
按照這樣的時間,求出的初始值,會有小數。
取整後,必然會有誤差。
----
(計數1000 時,...計數2000)
你按照計數 900、1200、1800 來設定初始值,再試試看。
⑧ 單片機數碼管上的數字以200ms的速度從300減到253時停止,led以1s10次的速度閃爍
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽級數碼管碼表0-f
uchar led=0x00;
uchar cnt=0,dis[3],scan;
uint dat=300;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
cnt%=4;
if(cnt==0)dat--;
if(dat<=253)
{
dat=253;
P1=led;
led=~led;
}
}
void t1isr() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1<<scan;
P0=table[dis[scan]];
scan++;
scan%=3;
}
void main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
ET1=1;
TR0=1;
TR1=1;
EA=1;
while(1)
{
dis[0]=dat/100;
dis[1]=dat%100/10;
dis[2]=dat%10;
}
}