『壹』 51單片機 用定時器T1控制兩位數碼管做從0計數到60的實驗,每一秒加1,可是怎都不顯示,求高手幫忙找原因
通過定時器初值可以看出單片機使用的是11.0592MHz晶振
把函數void dispiay(uchar ge,uchar shi)
改成void display(uchar shi,uchar ge)
即可編譯通過
只是函數拼寫錯誤和變數順序錯誤
『貳』 單片機 2位數間隔1s自動加1 的程序怎麼寫呀、
2位數間隔1s自動加1 的程序的實現方法:
1 利用定時器1,定時50毫秒,每當50毫秒定時時間到時,使用軟體計數器計數,當計數到20時,即1秒時間到。(這時軟體計數器要清零,重新開始為下一秒計數)
2 每當1秒時間到時,應該讓你的自動加1計數器加1。
3 樓上的朋友配合的真好,這么快就已經給出了具體的程序 其中 time為軟體計數器;x為自動加1計數器。你可以作為參考,修改後嵌入到自己的程序中。
『叄』 單片機按鍵按一次就加一
按鍵相對是個低速任務。你按的再快,一秒可以按十次嗎?什麼?你可以。。那你就是作弊了。因為哪怕你反應的過來。按鍵可不行。所以。這個本質你需要牢牢抓住。那麼你可以選擇一秒之內只檢測幾次按鍵。把幾乎是連續在使用的機器時間碎片化。比如在一個碎片里只查一次按鍵。是的,你現在就是這么做的。只是循環太快。碎片太多。按鍵的抖動你都查到了。所以你需要的僅僅是慢下來。極限就是剛剛說的查10次。算算,這是一個100ms的定時。明白定時器的真正用途了嗎?如果你實際這么實驗了你會發現這的確有效。不會加個成百上千了。接下來你需要設置一個邏輯讓按鍵檢測只對下降沿起作用。最好的辦法就是和前次的狀態比較。如果上次的狀態為高而此次狀態為低。那麼這就是個下降沿。於是你需要一個寄存器保存上一次的狀態。並每次比較後更新。原來這寄存器是這么用的。。實際實驗後發現這么干已經可以保證基本每次長按只會加1。但是短按似乎會丟失。那是因為。100ms實在是長了些。電平保持100ms有時是太難了。所以,你可以適當提高頻率。比如提高10倍。以10ms為周期。基本能解決大多數問題。
『肆』 單片機c語言按鍵每按一次加一一直到加到100程序怎麼寫求高手指點。
給你參考
//12M晶振。2位共陽數碼管,P0為段碼,P2.0、P2.1位控
#include <reg51.h>
#define uchar unsigned char
sbit P20=P2^0;
sbit P21=P2^1;
sbit KEY=P2^2;
uchar ge,shi;
uchar code tab[ ]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};
void delay_ms(unsigned int ms) //1ms延時
{
uchar a;
while(ms--)
for(a=123;a>0;a--);
}
void display();
void main()
{
while(1)
{
display();
while(!KEY)
{
display();
if(KEY)
ge++;
}
if(ge==10)
{
ge=0;
shi++;
}
if(shi==100)
{
shi=0;
}
}
}
void display( )
{
P20=1;
P0=tab[ge];
delay_ms(5);
P20=0;
P21=1;
P0=tab[shi];
delay_ms(5);
P21=0;
}
『伍』 單片機按鍵加一、減一
利用外部中斷實現按鍵按一下數碼管數字加1,實現00-99的循環,另一個按鍵實現清零,不管數碼管數字是多少,該按鍵按下數碼管顯示00