ch451的數(shù)碼管顯示缺點(diǎn)[討論]

ch451不能顯示第幾位,也就是常說的數(shù)碼管位選線不能選到。比如我只想選最后一位——第七位數(shù)碼管亮 ,其他的數(shù)碼管都是熄滅狀態(tài)。找不到相應(yīng)的操作命令,顯示參數(shù)的設(shè)定只能從第0位開始亮要求的位數(shù)。 有誰知道怎么解決的,請(qǐng)留下大名及命令,先行謝過了。[Emot]28[/Emot]

樓主,CH451是可以實(shí)現(xiàn)您的功能的,這好象不是缺點(diǎn)吧!因?yàn)橥ㄟ^程序就可以實(shí)現(xiàn)你的要求. 命令很簡(jiǎn)單.只要設(shè)置一下系統(tǒng)參數(shù)就好了!也就是開顯示,其他的命令如果您用不到可以不需要發(fā)送,這時(shí)候CH451就默認(rèn)在非BCD方式.然后發(fā)送你的數(shù)據(jù)就可以了.很簡(jiǎn)單.


再次看ch451使用手冊(cè) 還是不懂樓上所說的系統(tǒng)參數(shù)是哪個(gè)命令 附上我寫的程序,望指點(diǎn),程序運(yùn)行后只在數(shù)碼管位0(第一位)顯示數(shù)字0。

/*該程序要在數(shù)碼管位三重復(fù)顯示0~F, 2009年5月7日*/

#include #define uint unsigned int #define uchar unsigned char uchar code table[]={ //BCD譯碼0~F的存放表 0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f}; void delay(uchar n); //延時(shí)程序聲明 /*板子上CH451的連接*/ sbit ch451_dclk=P2^7; sbit ch451_din=P2^6; sbit ch451_load=P2^5;

void ch451_init(); //初始化程序聲明 void ch451_write(uint command); //ch451的12位命令函數(shù)聲明 /*主函數(shù)*/ void main() { while(1) { uchar j; ch451_init(); //初始化,選著4線 ch451_write(0x0401); //關(guān)WD、KEY開顯示 ch451_write(0x0590); //BCD譯碼,掃描極限一位,最亮 for(j=0;j<16;j++) //0~F的重復(fù)顯示 { ch451_write(0x0b00|table[j]); delay(20); //顯示延時(shí)0.2s } } } void ch451_init() { ch451_din=0; //初始化,選擇4線 ch451_din=1; } void ch451_write(uint command) //單片機(jī)向ch451發(fā)送的十二位命令 { unsigned char i; ch451_load=0; for(i=0;i<12;i++) { ch451_dclk=0; ch451_din=command&1; ch451_dclk=1; command>>=1; } ch451_load=1; } void delay(uchar n) //延時(shí)n*10ms { uchar a,b,c; for(a=0;a for(b=0;b<14;b++) for(c=0;c<237;c++); }


系統(tǒng)參數(shù)命令在手冊(cè)里面有詳細(xì)的描述,你可以看一下操作命令里面,即0x403,當(dāng)然你可以設(shè)置成0x401,僅開顯示功能,對(duì)應(yīng)你程序中的:ch451_write(0x0401); //關(guān)WD、KEY開顯示 關(guān)于你想要得到的結(jié)果,有以下兩種方法: (1)工作于非譯碼方式 程序需要定義顯示0-9 const unsigned char BCD_decode_tab[10] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F}; 程序修改如下: void main() { uchar i; while(1) { ch451_init(); //初始化,選著4線 ch451_write(0x0401); //關(guān)WD、KEY開顯示 for(i=0;i<10;i++) //這里的個(gè)數(shù)只是舉個(gè)例子 { ch451_write(0x0b00| BCD_decode_tab[ i] ); delay(20); //顯示延時(shí)0.2s } } }

(2) 工作于BCD方式 程序修改如下: void main() { uchar i; while(1) { ch451_init(); //初始化,選著4線 ch451_write(0x0401); //關(guān)WD、KEY開顯示 ch451_write(0x0590); //BCD譯碼,掃描極限一位 for(i=0;i<10;i++) //這里的個(gè)數(shù)只是舉個(gè)例子 { ch451_write(0x0800|table[ i ] ); //注意,當(dāng)掃描極限設(shè)置成1的時(shí)候,只有DIG0上的 數(shù)碼管亮.其他全不亮,不是由您自己定義的 delay(20); //顯示延時(shí)0.2s } } }


明白了 ,謝謝下雨的天


其實(shí)應(yīng)該是BCD譯碼的問題,不譯碼的00H是不顯示數(shù)字的,BCD譯碼00H顯示的是0,不向ch451發(fā)送顯示命令,ch451默認(rèn)的是00H,可以這么理解吧


呵呵!是的!可以這樣理解!


繼續(xù)發(fā)問 關(guān)于CH451的數(shù)碼管動(dòng)態(tài)驅(qū)動(dòng)問題

我想讓數(shù)碼管第一位顯示1,延時(shí),然后第二位顯示2,延時(shí),....一直到數(shù)碼管第八位顯示8。本來想要的結(jié)果的每一次顯示只顯示一個(gè)數(shù)字(當(dāng)然延時(shí)足夠長(zhǎng)了),現(xiàn)在的結(jié)果是第一位顯示1,但一直保持著,接著第二位顯示2,...最后八個(gè)都顯示了,并不是一次顯示一位。如下 本想要的結(jié)果: 1 2 3 4 . . . . 8

實(shí)際效果如下: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8


我想問下 如何才能把前面的顯示的 清除了 我用開顯示 在關(guān)顯示 也達(dá)不到效果


你好,在你使用ch451_write(CH451_DIG1 |2);時(shí),由于之前寫入的ch451_write(CH451_DIG0 |1);依然在執(zhí)行,所以不能達(dá)到你要得效果,要重新將DIG0消隱,才可在DIG1上單獨(dú)顯示2,以此類推即可。


怎樣消隱啊,開顯示再關(guān)顯示嗎?0x0401和0x0400沒用啊


在BCD譯碼方式下不能消隱,即使沒有給數(shù)碼管寫入data,也是顯示0,所以只能工作在非譯碼方式下來實(shí)現(xiàn)消隱的。即ch451_write(CH451_DIG0 |0x00);


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频