標題: 關于單片機數碼管動態顯示程序上的疑問 [打印本頁]
作者: fandongyang 時間: 2018-11-9 09:28
標題: 關于單片機數碼管動態顯示程序上的疑問
下面面這個是我在51hei論壇上看到的程序,我看了一下我有個疑問(1)當stopwatch=1的時候, LedNumbe[]這個數組是否除了LedNumbe[0]=1以外,其他LedNumbe[]是否都為0 ,假如是的話,請看問題2。(2)當stopwatch=1的時候,進入動態刷新,除了第一個數碼管能顯示1外 其他數碼管都會有顯示0,到最后的數碼管的效果就會變成這樣000001 000002 000003,而這個程序的效果應該是 1 2 3 4 5 6,就是多余位是不會顯示的0的。我現在疑問的是 我不知道自己所描述的疑問是否正確
#include <reg52.h> //包含寄存器的庫文件
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = { //用數組來表示數碼管真值表
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e,
};
unsigned char LedNumber[6] = {0}; //定義全局變量
unsigned char j = 0;
unsigned int counter = 0;
void main()
{
unsigned long stopwatch =0;
ENLED = 0; ADDR3 = 1; P0 = 0XFF; //74HC138和P0初始化部分
TMOD = 0x01; //設置定時器0為模式1
TH0 = 0xFC;
TL0 = 0x67; //定時值初值,定時1ms
TR0 = 1; //打開定時器0
EA = 1; //打開中中斷
ET0 = 1; //打開定時器0中斷
while(1)
{
if(1000 == counter) //判斷定時器0溢出是否達到1000次
{
counter = 0;
stopwatch++;
LedNumber[0] = stopwatch%10;
LedNumber[1] = stopwatch/10%10;
LedNumber[2] = stopwatch/100%10;
LedNumber[3] = stopwatch/1000%10;
LedNumber[4] = stopwatch/10000%10;
LedNumber[5] = stopwatch/100000%10;
}
}
}
void InterruptTimer0() interrupt 1 //中斷函數的特殊寫法,數字’1’為中斷入口號
{
TH0 = 0xFC; //溢出后進入中斷重新賦值
TL0 = 0x67;
counter++; //計數值counter加1
P0 = 0xFF; //消隱
switch(j)
{
case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[0]]; break;
case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[1]]; break;
case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[2]]; break;
case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[3]]; break;
case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; P0=LedChar[LedNumber[4]]; break;
case 5: ADDR0=1; ADDR1=0; ADDR2=1; j=0; P0=LedChar[LedNumber[5]]; break;
default: break;
} //動態刷新
}
作者: fandongyang 時間: 2018-11-12 19:50
有沒有人
作者: zhouwen 時間: 2018-11-13 11:34
(1)當stopwatch=1的時候, LedNumbe[]這個數組是否除了LedNumbe[0]=1以外,其他LedNumbe[]是否都為0 :
答:沒錯 當 stopwatch=1 時stopwatch/10 = 0,0%10 = 0,所以 LedNumber[1] = stopwatch/10%10 = 0 ;
(2)當stopwatch=1的時候,進入動態刷新,除了第一個數碼管能顯示1外 其他數碼管都會有顯示0,到最后的數碼管的效果就會變成這樣000001 000002 000003,而這個程序的效果應該是 1 2 3 4 5 6,就是多余位是不會顯示的0的。
答:你的想法是對的
作者: zl2168 時間: 2018-11-14 08:27
4.2 LED數碼管動態顯示 實例56 PNP晶體管選通3位共陽LED數碼管動態顯示; 實例57 74LS139選通4位LED數碼管動態顯示 實例58 74LS138選通8位LED數碼管動態顯示 實例59 74LS595串行選通8位LED數碼管動態顯示 實例60 8255A擴展8位LED數碼管動態顯示 實例63 8155擴展8位LED數碼管動態顯示 實例64 MAX7221控制8位LED數碼管動態顯示 以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
久久亚洲国产精品日日av夜夜
|
国产视频1区
|
91在线资源
|
一区二区三区在线观看免费视频
|
日韩精品一区二区三区久久
|
精品伊人|
久久国产一区二区三区
|
亚洲欧美综合
|
日韩av成人
|
97超级碰碰
|
成人黄色电影在线播放
|
国产片侵犯亲女视频播放
|
激情在线视频网站
|
国产欧美一区二区三区久久
|
色婷婷av一区二区三区软件
|
精品国产乱码久久久久久丨区2区
|
欧美成人精品在线观看
|
国产精品揄拍一区二区
|
久久久精品亚洲
|
日韩精品在线一区
|
成人免费淫片aa视频免费
|
国产国拍亚洲精品av
|
91麻豆精品国产91久久久久久久久
|
毛片网在线观看
|
久久99精品久久久久久国产越南
|
青青久视频
|
国产亚洲精品成人av久久ww
|
欧美一区二区三区视频
|
一级毛片视频在线
|
日韩免费中文字幕
|
国产一级一片免费播放
|
日本精品久久久久久久
|
www.亚洲一区二区
|
国产精品亚洲成在人线
|
成人午夜视频在线观看
|
日韩欧美国产一区二区三区
|
国产999精品久久久
日本视频一区二区三区
|
国内精品99
|
天天干夜夜操
|
日韩av一区二区在线
|
亚洲一区国产精品
|