標(biāo)題: 求教89c52rc單片機(jī)六位一體數(shù)碼管怎么可以第一次顯示如123456 [打印本頁]
作者: zhezhichun 時(shí)間: 2024-3-27 09:10
標(biāo)題: 求教89c52rc單片機(jī)六位一體數(shù)碼管怎么可以第一次顯示如123456
求教89c52rc 六位一體數(shù)碼管怎么可以第一次顯示如(123456),第二次顯示(338737),第三次顯示(decfga),六個(gè)數(shù)同時(shí)顯示(用delay(1)),三次顯示間隔一秒
作者: cedtek 時(shí)間: 2024-3-28 18:07
其實(shí)你只需要了解一個(gè)動(dòng)態(tài)掃描的顯示方式就可以實(shí)現(xiàn)了,我這里把我之前的學(xué)習(xí)筆記貼出來,我自己溫故知新的同時(shí)希望對(duì)你也有所幫助。
數(shù)碼管動(dòng)態(tài)掃描顯示原理六位八段數(shù)碼管的內(nèi)部結(jié)構(gòu)圖如下(下圖以共陽極為例)
51hei.png (129.21 KB, 下載次數(shù): 52)
下載附件
2024-3-30 02:45 上傳
由圖可知,六位八段數(shù)碼管當(dāng)中,每個(gè)數(shù)碼位的段選信號(hào)全部連接到了一起,然后進(jìn)行輸出(對(duì)于共陽極數(shù)碼管來說,段選引腳為低電平時(shí)有電流從數(shù)碼管的段選引腳流出);每個(gè)數(shù)碼位單獨(dú)引出一個(gè)位選信號(hào)用來控制數(shù)碼位的選擇,這種連接方式會(huì)使得被選中的數(shù)碼位顯示的內(nèi)容都是相同的,因?yàn)檫@些被選中的數(shù)碼位的段選信號(hào)已經(jīng)全部連接到了一起。如何使用這個(gè)六位八段數(shù)碼管來實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示呢?我們需要使用一種方式:動(dòng)態(tài)掃描
如何使用動(dòng)態(tài)掃描的方式來實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示呢?這里給大家舉一個(gè)例子:比如說,我們想要使用六位八段數(shù)碼管顯示數(shù)字 123456
51hei1.png (37.67 KB, 下載次數(shù): 46)
下載附件
2024-3-30 02:45 上傳
如何使用六位八段數(shù)碼管來顯示數(shù)字 123456 呢?
首先我們選中第一個(gè)數(shù)碼位,讓這個(gè)數(shù)碼位顯示數(shù)字 1;然后它顯示的時(shí)間設(shè)為 T,這個(gè) T 可以看作一個(gè)周期
51hei2.png (39.15 KB, 下載次數(shù): 59)
下載附件
2024-3-30 02:45 上傳
當(dāng)?shù)谝粋(gè)數(shù)碼位完成一個(gè) T 周期數(shù)字 1 的顯示之后,立刻選中第二個(gè)數(shù)碼位;注意,此時(shí)只選中了第二個(gè)數(shù)碼位讓它顯示數(shù)字 2,顯示的時(shí)間同樣是一個(gè)周期 T
51hei3.png (39.27 KB, 下載次數(shù): 57)
下載附件
2024-3-30 02:45 上傳
當(dāng)?shù)诙䝼(gè)數(shù)碼位完成了一個(gè)周期 T 數(shù)字 2 的顯示之后,立刻選中第三個(gè)數(shù)碼位;這兒注意,也是只選中了第三個(gè)數(shù)碼位讓它顯示數(shù)字 3,同樣顯示時(shí)間為 T
51hei4.png (39.27 KB, 下載次數(shù): 49)
下載附件
2024-3-30 02:45 上傳
依次往下類推,那么此時(shí)就顯示 4
51hei5.png (39.2 KB, 下載次數(shù): 46)
下載附件
2024-3-30 02:45 上傳
然后是 5
51hei6.png (39.26 KB, 下載次數(shù): 50)
下載附件
2024-3-30 02:45 上傳
然后是 6
51hei7.png (39.3 KB, 下載次數(shù): 45)
下載附件
2024-3-30 02:45 上傳
當(dāng)?shù)诹鶄(gè)數(shù)碼位完成了一個(gè)周期 T 數(shù)字 6 的顯示之后,再重新選中第一個(gè)數(shù)碼位;這兒也是只選中了第一個(gè)數(shù)碼位,讓它繼續(xù)顯示數(shù)字 1,然后顯示的時(shí)間仍然是 T 周期,這樣依次往下循環(huán)。
通過上述動(dòng)態(tài)顯示過程的描述,我們知道這樣一個(gè)循環(huán)是六個(gè)周期就是 6*T;如果說給這個(gè) T 規(guī)定一個(gè)確切的時(shí)間會(huì)怎樣呢?首先給 T 規(guī)定一個(gè)確切的時(shí)間 1s;如果說 T 等于 1s,六位八段數(shù)碼管的六個(gè)數(shù)碼位會(huì)依次顯示 1、2、3、4、5、6 每個(gè)數(shù)字顯示的時(shí)間為 1s,如下GIF動(dòng)圖所示
間隔1秒動(dòng)態(tài)顯示123456.gif (41.1 KB, 下載次數(shù): 45)
下載附件
2024-3-29 10:27 上傳
如果進(jìn)一步把這個(gè) T 進(jìn)行縮短,比如說縮短到 20ms 這時(shí)候六位八段數(shù)碼管的六個(gè)數(shù)碼位會(huì)進(jìn)行閃爍顯示,顯示的內(nèi)容依次是 1、2、3、4、5、6,如下GIF動(dòng)圖所示
間隔20毫秒動(dòng)態(tài)顯示123456.gif (41.1 KB, 下載次數(shù): 36)
下載附件
2024-3-29 10:28 上傳
如果進(jìn)一步縮短時(shí)間 T 為 1ms,這時(shí)候,六位八段數(shù)碼管的六個(gè)數(shù)碼位實(shí)際上也是依次進(jìn)行閃爍的顯示,顯示的內(nèi)容依次是 1、2、3、4、5、6 每個(gè)數(shù)字顯示時(shí)間是 1ms,如下GIF動(dòng)圖所示
間隔1毫秒動(dòng)態(tài)顯示123456.gif (23.31 KB, 下載次數(shù): 47)
下載附件
2024-3-29 10:28 上傳
但是它們切換的頻率太快了,我們的肉眼不能分辨這種閃爍,就誤以為六位八段數(shù)碼管的六個(gè)數(shù)碼位在同時(shí)進(jìn)行顯示,而且顯示的內(nèi)容是 123456。
這樣就使用動(dòng)態(tài)掃描的方式實(shí)現(xiàn)了數(shù)碼管的動(dòng)態(tài)顯示。
使用動(dòng)態(tài)掃描的方式實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示,實(shí)際上是利用了兩個(gè)現(xiàn)象:人眼的視覺暫留特性和數(shù)碼管的余暉效應(yīng)。人眼在觀察景物時(shí),光信號(hào)傳入到大腦神經(jīng)需要經(jīng)過一段時(shí)間,光的作用結(jié)束之后我們的視覺影像并不會(huì)立刻的消失,這種殘留的視覺被稱為后像,這種現(xiàn)象就被稱為視覺暫留;數(shù)碼管的余暉效應(yīng)是什么意思呢?當(dāng)我們停止向發(fā)光二極管供電時(shí),發(fā)光二極管的亮度仍能夠維持一段時(shí)間。我們的動(dòng)態(tài)掃描利用這兩個(gè)特性就實(shí)現(xiàn)了數(shù)碼管的動(dòng)態(tài)顯示。
Proteus 仿真看看吧一開始先設(shè)置T為3s左右看一看,如下GIF動(dòng)圖所示
20240328175050_GAQsw7lADX2.gif (483.73 KB, 下載次數(shù): 50)
下載附件
2024-3-28 17:52 上傳
接著設(shè)置為300ms左右,如下GIF動(dòng)圖所示(閃爍起來了
)
20240328175335_W9Wmpykqf15.gif (540.93 KB, 下載次數(shù): 48)
下載附件
2024-3-28 17:54 上傳
然后設(shè)置為30ms左右,如下GIF動(dòng)圖所示(貌似眨眼補(bǔ)幀后就是同時(shí)顯示的了
)
20240328175542_UE6ccyR4TS5.gif (713.58 KB, 下載次數(shù): 50)
下載附件
2024-3-28 17:57 上傳
我還要快一點(diǎn),那就再除個(gè)10,每個(gè)位只顯示3ms左右的時(shí)間看看吧
20240328175927_fEWASBjhJY2.gif (641.73 KB, 下載次數(shù): 56)
下載附件
2024-3-28 18:04 上傳
看來它已經(jīng)可以欺騙我們的眼睛和大腦了(至少仿真軟件認(rèn)為是這樣的)
用手機(jī)拍視頻時(shí)如果畫面中有對(duì)準(zhǔn)過多位數(shù)碼管顯示類產(chǎn)品的話,相信你一定注意到過手機(jī)畫面中,數(shù)碼管通常會(huì)閃爍吧,原因就是使用了動(dòng)態(tài)掃描的方式顯示
作者: a399288395 時(shí)間: 2024-3-29 08:54
看來單片機(jī)開發(fā)板還沒有學(xué)入門; 找個(gè)視頻自己看了后再寫出來,然后下載到板子上看看實(shí)際情況, 再改改延時(shí)時(shí)間 你就會(huì)看到另一種不一樣的結(jié)果, 只有這樣才真正學(xué)會(huì), 在這問這些是沒有用的, 跟你講動(dòng)態(tài)掃描 就好像講無字天書一樣, 很玄妙!
作者: 明日之星8 時(shí)間: 2024-3-29 10:02
你知道六位的數(shù)碼管里面有多少個(gè)發(fā)光二極管嗎?
6x8=48個(gè)發(fā)光二極管,最笨的辦法要用49根引腳才能控制它,
聰明的辦法只要6+8=14根引腳就行了,但是要用動(dòng)態(tài)掃描的方
法才能正常顯示。實(shí)際同一時(shí)間只能有一個(gè)數(shù)碼管在顯示,其
它的都是關(guān)著的不顯示的,“動(dòng)態(tài)掃描”的意思是排著隊(duì)一個(gè)一個(gè)
的來顯示,只要切換的速度足夠快,我們就感覺是“同時(shí)”都在顯
示數(shù)字了。你感覺1秒鐘的時(shí)間很短,對(duì)于單片機(jī)來說卻是很漫長(zhǎng)
的,比如24MHz的頻率它要計(jì)數(shù)2400萬才到1秒鐘。
你這個(gè)題目很大,慢慢來吧,從點(diǎn)亮一個(gè)發(fā)光管開始吧,然后學(xué)會(huì)
在其中的一個(gè)數(shù)碼管上顯示“12345abcd”這些,還要能隨意的顯示,
隨意的變換顯示給出的內(nèi)容,然后是把時(shí)間分成小段完成動(dòng)態(tài)掃描。
你要的不同時(shí)間段顯示不同的內(nèi)容,還要再把時(shí)間分成大的時(shí)間段
顯示你要的內(nèi)容。
作者: 黎明的曙光哈哈 時(shí)間: 2024-3-29 11:09
#define display_tm_base 15u
//
display_time++
if(display_time>=display_tm_base)
{
display_show();
display_time=0;
index++;
if(index>=12)
{
index=0;
}
}
//上面那部分程序放在定時(shí)器中
void display_show()//數(shù)碼管顯示程序
{
if(run_mode==6)
{
show_value[0]=mode_timer_value/100; //百位
show_value[1]=mode_timer_value%100/10; //十位
show_value[2]=mode_timer_value%100%10;//十位
}
else
{
if(pro_set==0)
{
show_value[0]=trigger_cut/100; //百位
}
else
{
show_value[0]=16; //P段顯示
}
show_value[1]=trigger_cut%100/10; //十位
show_value[2]=trigger_cut%100%10;//十位
}
show_value[3]=intergral/100; //百位
show_value[4]=intergral%100/10;// 十位
show_value[5]=intergral%100%10;//個(gè)位
if(index==0)
{
select_pin1=0;
select_pin2=1;
select_pin3=1;
select_pin4=1;
select_pin5=1;
select_pin6=1;
show_port=table[show_value[2]];
}
else if(index==2)
{
select_pin1=1;
select_pin2=0;
select_pin3=1;
select_pin4=1;
select_pin5=1;
select_pin6=1;
show_port=table[show_value[1]];
}
else if(index==4)
{
select_pin1=1;
select_pin2=1;
select_pin3=0;
select_pin4=1;
select_pin5=1;
select_pin6=1;
show_port=table[show_value[0]];
}
else if(index==6)
{
select_pin1=1;
select_pin2=1;
select_pin3=1;
select_pin4=0;
select_pin5=1;
select_pin6=1;
show_port=table[show_value[5]];
}
else if(index==8)
{
select_pin1=1;
select_pin2=1;
select_pin3=1;
select_pin4=1;
select_pin5=0;
select_pin6=1;
show_port=table[show_value[4]];
}
else if(index==10)
{
select_pin1=1;
select_pin2=1;
select_pin3=1;
select_pin4=1;
select_pin5=1;
select_pin6=0;
show_port=table[show_value[3]];
}
else
{
select_pin1=1;
select_pin2=1;
select_pin3=1;
select_pin4=1;
select_pin5=1;
select_pin6=1;
// show_port=0X00;
}
}
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73}; //數(shù)碼管共陰極編碼表
作者: cy009 時(shí)間: 2024-3-31 23:11
標(biāo)題: 修改多次都失敗,不知何因,補(bǔ)發(fā)附件。
042.png (19.65 KB, 下載次數(shù): 44)
下載附件
2024-3-31 23:04 上傳
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc2}; //共陽代碼
uchar code com[]={0x01,0x02,0x04,0x08,0x10,0x20}; //位碼
uchar seg_buff[6]; //顯示緩沖區(qū)
/****************************************************
延時(shí)子函數(shù)(xms)
****************************************************/
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
/***************************************************************
顯示子函數(shù)
***************************************************************/
void seg_show(uchar a,uchar b,uchar c,uchar x,uchar y,uchar z)
{
uchar i;
seg_buff[0]=seg[a];
seg_buff[1]=seg[b ];
seg_buff[2]=seg[c];
seg_buff[3]=seg[x];
seg_buff[4]=seg[y];
seg_buff[5]=seg[z];
for(i=0;i<6;i++)
{
P2=0x00;
P0=seg_buff[ i];
P2=com[ i];
delay(1);
}
}
/****************************************************
主函數(shù)
****************************************************/
void main()
{
while(1)
{
uint cnt; //延時(shí)計(jì)數(shù)參數(shù),不精確的計(jì)算,想精確的建議用定時(shí)器
//數(shù)碼管刷新一次約為6ms,167次約為1秒
if(cnt<167) seg_show(1,2,3,4,5,6);
else if(cnt>=167 && cnt<334) seg_show(3,3,8,7,3,7);
else seg_show(13,14,12,15,16,10);
cnt++;
if(cnt>501) cnt=0;
}
}
-
-
seg05.rar
2024-4-1 18:38 上傳
點(diǎn)擊文件名下載附件
729 Bytes, 下載次數(shù): 1
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |