|
各位前輩,我最近重拾單片機(jī),在實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示的時(shí)候遇到一個(gè)問題。我按照教程編寫了使用兩個(gè)鎖存器實(shí)現(xiàn)數(shù)碼管顯示的代碼,并使用定時(shí)器中斷來進(jìn)行延時(shí)的作用。當(dāng)延時(shí)為1s時(shí),可以實(shí)現(xiàn)前六個(gè)數(shù)碼管分別從1-6流動(dòng)。但是,如果將時(shí)間降低,我在proteus上無法實(shí)現(xiàn)動(dòng)態(tài)顯示的效果。仿真中的電路圖是我自己畫的,代碼是按照教程編寫的,請(qǐng)各位大佬幫我看一下問題在哪?(有一個(gè)蜂鳴器,測(cè)試的大佬要關(guān)一下,不然很吵
鎖存器-數(shù)碼管-蜂鳴器-LED電路圖.png (360.38 KB, 下載次數(shù): 29)
下載附件
2023-9-14 10:58 上傳
)
- //數(shù)碼管以1s間隔從0-6,在前六個(gè)數(shù)碼管流水顯示
- //問題:在proteus仿真無法實(shí)現(xiàn)實(shí)驗(yàn)板上的動(dòng)態(tài)數(shù)碼管顯示效果,無法用視覺暫留形成效果。。。。。
- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar temp,aa,numdu,numwe;
- sbit dula = P2^6;
- sbit wela = P2^7;
- uchar code table[] = {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- uchar code tablewe[] = {
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- void main()
- {
- numdu = 0;
- numwe = 0;
- aa = 0;
- TMOD = 0x01;//六行代碼完成定時(shí)器0中斷的初始化。。。。!
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;//啟動(dòng)定時(shí)器0!
- while(1)
- {
- if(aa==1)
- {
- aa = 0;
- numdu++;
- if(numdu==7)
- {
- numdu = 1;
- }
- dula = 1;
- P0 = table[numdu];
- dula = 0;
- wela = 1;
- P0 = tablewe[numwe];
- wela = 0;
- numwe++;
- if(numwe==6)
- numwe = 0;
-
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- aa++;
- }
復(fù)制代碼
|
|