標(biāo)題: 請(qǐng)問(wèn)數(shù)碼管動(dòng)態(tài)顯示為什么必須要延遲呢? [打印本頁(yè)]
作者: cir_biochem 時(shí)間: 2012-6-9 01:11
標(biāo)題: 請(qǐng)問(wèn)數(shù)碼管動(dòng)態(tài)顯示為什么必須要延遲呢?
以下是個(gè)簡(jiǎn)單的數(shù)碼管動(dòng)態(tài)顯示的C語(yǔ)言程序,
假如我們把延時(shí)的delay(2);這個(gè)去掉,結(jié)果雖然從邏輯上講是沒(méi)問(wèn)題的,但是下載到板上后,看到顯示比較模糊,一些不該亮的地方也有點(diǎn)亮。
這是為什么呢?
1 #include <reg52.h>
2 sbit DUAN = P2^6;
3 sbit WEI = P2^7;
4
5 void delay(unsigned int z) //1ms延時(shí)
6 {
7 unsigned int x,y;
8 for(x=z;x>0;x--)
9 for(y=110;y>0;y--);
10 }
11
12 void main()
13 {
14 unsigned char code show[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
15 unsigned int i,which;
16 while(1)
17 {
18 which = 1;
19 for(i=0; i<8; i++)
20 {
21 DUAN = 1;
22 P0 = show;
23 DUAN = 0;
24 P0 = 0XFF;
25 WEI = 1;
26 P0 = 255-which;
27 WEI = 0;
28 which *= 2;
29 //delay(2);
30 }
31 }
32
33 }
34
35
delay函數(shù)還是有點(diǎn)浪費(fèi)資源,改為定時(shí)器來(lái)完成延時(shí),
以下是剛調(diào)試好的60秒倒計(jì)時(shí)。就是在調(diào)試這個(gè)程序時(shí)遇到了前面提到的數(shù)碼管模糊現(xiàn)象。
1 #include <reg52.h>
2
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define LED_LOCK openLed = 1
6 #define MATRIX_LOCK P2 = 0x35
7 #define N 2
8 //N是顯示位數(shù)。
9 #define START 59
10 #define TIMER_NUM 1000
11
12 uchar tmp[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管0~9編碼
13
14 uint timer1 = 0; timer2 = 0;
15
16 sbit led1 = P0^0;
17 sbit openLed = P1^4;
18 sbit Duan = P2^6;
19 sbit Wei = P2^7;
20
21
22 void main()
23 {
24 uint whichOne = 0;
25 uchar select[]={0xff - 1, 0xff - 2, 0xff - 4, 0xff - 8, 0xff-16, 0xff-32, 0xff-64, 0xff-128},
26 show[2],
27 num = START;
28 //select:位選編碼
29 LED_LOCK;
30 MATRIX_LOCK;
31
32 TMOD = 0x01;
33 TH0 = (65536 - TIMER_NUM) >> 8;
34 TL0 = (65536 - TIMER_NUM) % 256;
35 EA = 1;
36 ET0 = 1;
37 TR0 = 1;
38
39 while(1)
40 {
41 if(timer1 >= 1000)
42 {
43 if(num == 0)
44 num = START + 1;
45 num--;
46 timer1 = 0;
47 }
48
49 if(timer2 >= 10)
50 {
51 whichOne++;
52 whichOne %= N;
53 show[0] = num / 10;
54 show[1] = num % 10;
55 Duan = 1;
56 P0 = tmp[show[whichOne]];
57 Duan = 0;
58 P0 = 0xff;
59 Wei = 1;
60 P0 = select[whichOne];
61 Wei = 0;
62 timer2 = 0;
63 }
64 }
65
66 }
67
68 void Timer0() interrupt 1
69 {
70 TH0 = (65536 - TIMER_NUM) >> 8;
71 TL0 = (65536 - TIMER_NUM) % 256;
72 timer1 ++;
73 timer2 ++;
74 }
[此貼子已經(jīng)被作者于2012-6-9 12:19:33編輯過(guò)]
作者: admin 時(shí)間: 2012-6-9 01:58
delay(2); 的作用就是讓他顯示一段時(shí)間啊
作者: 青蘋(píng)果 時(shí)間: 2012-6-9 06:40
不延時(shí)的話(huà),一閃而過(guò),你看得清楚呀
作者: cir_biochem 時(shí)間: 2012-6-9 12:25
謝謝,以后記住這個(gè)例行步驟;)
作者: cir_biochem 時(shí)間: 2012-6-9 12:30
從實(shí)驗(yàn)的結(jié)果看,該顯的段顯示比較亮,奇怪的就是為什么不該顯示的段也會(huì)微微發(fā)亮。加延時(shí)后不該亮的段一點(diǎn)都不亮的。
作者: admin 時(shí)間: 2012-6-9 19:51
這個(gè)問(wèn)題 就要考慮到消隱了,只所以出現(xiàn)那個(gè)微亮的,可見(jiàn) 消隱沒(méi)有做好 具體你可參考 http://m.zg4o1577.cn/bbs/dpj-10971-1.html
按上面的操作一下 應(yīng)該微亮問(wèn)題可以解決,,
delay(2); 這段顯示的延時(shí)理論上 延時(shí)越長(zhǎng)顯示的亮度就越大
作者: cir_biochem 時(shí)間: 2012-6-9 22:18
謝謝您的耐心解答,我程序中在WEI = 1 之前的 P0 = 0xff,也可以消影,當(dāng)然鏈接中程序的方法還可以節(jié)省一行,更好些。
如果把該程序的delay語(yǔ)句去掉,顯示的結(jié)果還是有點(diǎn)怪。
也不去深究了,繼續(xù)往下學(xué)習(xí)。謝謝;)
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
99re视频在线
|
国产日本精品
|
国产视频h
|
午夜www|
五月激情综合网
|
一级黄色大片
|
激情av网|
国产一级大片
|
中日韩毛片
|
日韩欧美中文
|
91视频网页
|
在线观看免费毛片
|
狠狠干2018
|
国产精品麻豆
|
黄色欧美大片
|
激情五月综合色婷婷一区二区
|
天天色天天色
|
一区二区三区四区在线播放
|
国产黄色免费视频
|
久久性生活视频
|
中文字幕免费在线看线人动作大片
|
天天干夜夜操
|
国产中文字幕在线
|
九色精品
|
国产精品久久久久久久久免费桃花
|
日韩综合久久
|
亚洲成a人
|
欧美日韩黄色片
|
黄色av免费在线观看
|
看黄色大片
|
日韩高清在线播放
|
日韩一区二区三区在线
|
91看片在线
|
欧美黄色片在线观看
|
国产精品欧美在线
|
亚洲国产天堂
|
中文字幕在线观看第一页
|
亚洲成人精品在线
|
婷婷在线视频
|
少妇一级淫片免费观看
|
一区二区免费
|