久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20581|回復: 6
收起左側

請問數碼管動態顯示為什么必須要延遲呢?

[復制鏈接]
ID:1805 發表于 2012-6-9 01:11 | 顯示全部樓層 |閱讀模式
 以下是個簡單的數碼管動態顯示的C語言程序,
假如我們把延時的delay(2);這個去掉,結果雖然從邏輯上講是沒問題的,但是下載到板上后,看到顯示比較模糊,一些不該亮的地方也有點亮。
這是為什么呢?


1 #include <reg52.h>
2 sbit DUAN = P2^6;
3 sbit WEI = P2^7;
4
5 void delay(unsigned int z) //1ms延時
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函數還是有點浪費資源,改為定時器來完成延時,
以下是剛調試好的60秒倒計時。就是在調試這個程序時遇到了前面提到的數碼管模糊現象。



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是顯示位數。
9 #define START 59
10 #define TIMER_NUM 1000
11
12 uchar tmp[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管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     }
[此貼子已經被作者于2012-6-9 12:19:33編輯過]
回復

使用道具 舉報

ID:1 發表于 2012-6-9 01:58 | 顯示全部樓層
delay(2); 的作用就是讓他顯示一段時間啊
回復

使用道具 舉報

ID:27916 發表于 2012-6-9 06:40 | 顯示全部樓層
不延時的話,一閃而過,你看得清楚呀
回復

使用道具 舉報

ID:1805 發表于 2012-6-9 12:25 | 顯示全部樓層
 謝謝,以后記住這個例行步驟;)
回復

使用道具 舉報

ID:1805 發表于 2012-6-9 12:30 | 顯示全部樓層
從實驗的結果看,該顯的段顯示比較亮,奇怪的就是為什么不該顯示的段也會微微發亮。加延時后不該亮的段一點都不亮的。
回復

使用道具 舉報

ID:1 發表于 2012-6-9 19:51 | 顯示全部樓層

這個問題 就要考慮到消隱了,只所以出現那個微亮的,可見 消隱沒有做好 具體你可參考 http://www.zg4o1577.cn/bbs/dpj-10971-1.html

 

按上面的操作一下 應該微亮問題可以解決,,

delay(2); 這段顯示的延時理論上  延時越長顯示的亮度就越大

回復

使用道具 舉報

ID:1805 發表于 2012-6-9 22:18 | 顯示全部樓層
 謝謝您的耐心解答,我程序中在WEI = 1 之前的 P0 = 0xff,也可以消影,當然鏈接中程序的方法還可以節省一行,更好些。
如果把該程序的delay語句去掉,顯示的結果還是有點怪。
也不去深究了,繼續往下學習。謝謝;)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久一区 | 青青久久 | 日本天天操| 亚洲视频在线免费观看 | 国产精品一区二区久久精品爱微奶 | 涩涩视频在线看 | 久久精品色欧美aⅴ一区二区 | 中文字幕日韩欧美一区二区三区 | 69性欧美高清影院 | 欧美日韩一区二区三区不卡视频 | 亚洲自拍偷拍视频 | 国产精品久久久久久亚洲调教 | 久久久这里都是精品 | 国产精品91网站 | 日韩精品一区二区三区中文字幕 | 精品久久亚洲 | 第四色影音先锋 | 中文字幕1区| 夜久久| 欧洲亚洲视频 | 久久久高清| 久久久久亚洲精品中文字幕 | 91一区二区在线观看 | 精品精品 | 欧美日韩国产一区 | 91欧美| 中文字幕视频在线 | av黄色免费在线观看 | 黄色片网站国产 | 欧美日韩在线免费 | 成人二区 | 中文字幕亚洲视频 | 亚洲v日韩v综合v精品v | 婷婷综合网 | 在线视频国产一区 | 成人自拍av | 国产亚洲精品久久yy50 | 国产精品国产a | 久久精品国产久精国产 | 久久夜夜 | 久久国产精品久久久久 |