熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2024-9-10 11:12
正文摘要:應(yīng)該是關(guān)于消隱的內(nèi)容沒有弄好,第七位數(shù)碼管的數(shù)字看不到了,各位大佬能幫忙看看到底應(yīng)該怎么改代碼才能得到穩(wěn)定的顯示呢? 數(shù)碼管第七位不顯示 單片機(jī)源程序如下: #include<stc15.h> #define uCha ... |
老董 發(fā)表于 2024-9-17 23:27 STC的工具軟件里面有個(gè)按鍵 |
想請(qǐng)教一下你的stc單片機(jī)是怎么加到軟件里的 我的軟件里沒有這個(gè) |
P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; 設(shè)置有關(guān)系吧 |
開來就是被系統(tǒng)刪除了
|
|
1860774xxxx 發(fā)表于 2024-9-11 22:20 可能需要使用代碼功能吧 我發(fā)的第二行也有括弧的,實(shí)際上是沒有的 |
xiaobendan001 發(fā)表于 2024-9-11 19:49 我也不知道為什么 后面的i看不到 |
IMG_20240911_221824.jpg (643.84 KB, 下載次數(shù): 11)
1860774xxxx 發(fā)表于 2024-9-11 19:19 P0=wei_num; //發(fā)送段碼 P0=wei_num; //發(fā)送段碼 |
1860774xxxx 發(fā)表于 2024-9-11 19:19 P0=wei_num; //發(fā)送段碼 P2=wei;// 位 這里寫漏了 |
qiuqiubuyao 發(fā)表于 2024-9-11 08:18 #include <STC89C5xRC.H>//此文件中定義了單片機(jī)的一些特殊功能寄存器 typedef unsigned char u8; //無符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u8 所占位數(shù)8位 范圍0~255 typedef unsigned int u16; //無符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u16 所占位數(shù)16位 范圍0~65535 u8 code ma[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數(shù)字"0123456789-" 共陰 u8 code wei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位 第一位開始點(diǎn)亮 0x7f 0111 1111 ......... u8 wei_num[8]; //存儲(chǔ)記錄數(shù)碼管8個(gè)段碼位的值 要發(fā)送數(shù)字到哪一位的暫存區(qū) u8 shi,fen,miao; //時(shí) 分 秒 變量 /*12T 12M晶振 延時(shí)函數(shù) Delay_ms(1)時(shí)大約1ms*/ void Delay_ms(u16 ms) { u8 t; while(ms--) { for(t = 0; t < 98; t ++); } } /*主函數(shù)*/ void main() { u8 i; while(1) { /*數(shù)碼管顯示處理*/ wei_num[7]=ma[shi%100/10]; //顯示 時(shí) wei_num[6]=ma[shi%10]; // wei_num[5]=ma[10]; //顯示"-" wei_num[4]=ma[fen%100/10]; //顯示 分 wei_num[3]=ma[fen%10]; // wei_num[2]=ma[10]; //顯示"-" wei_num[1]=ma[miao%100/10]; //顯示 秒 wei_num[0]=ma[miao%10]; // for(i=0; i<8; i++) { P0=wei_num; //發(fā)送段碼 P2=wei; //位 Delay_ms(1); //間隔一段時(shí)間掃描 P0=0x00;//消隱 } } } 難道這樣還不夠明朗嗎 加上定時(shí)器加上按鍵就可以了 再說你那按鍵用while(!xx); 按鍵按下是會(huì)卡死 數(shù)碼管消滅 |
是否需要消隱看IO口并行位寬,51單片機(jī)為8位并行IO,段碼和位碼做不到并行發(fā)送,所以需要消影處理(先關(guān)閉前一位再打開下一位),是否顯示正常以實(shí)物驗(yàn)證為準(zhǔn)。 用74HC595或273并行鎖存發(fā)送、FPGA、16位并行IO的單片機(jī)驅(qū)動(dòng) 8位8段數(shù)碼管或8*8點(diǎn)陣不需要消影。 |
數(shù)碼管動(dòng)態(tài)顯示程序中沒有消隱程序行,在proteus仿真中會(huì)出現(xiàn)一些無序的亂碼或意想不到的顯示錯(cuò)誤。 程序中8個(gè)數(shù)碼管的程序段最后都要加上消隱,以第一個(gè)數(shù)碼管為例: 原程序?yàn)椋?br /> P1=b[0]; P0=a[hour/10]; Delay(10); 加上消隱后程序應(yīng)為(增加一行): P1=b[0]; P0=a[hour/10]; Delay(10); P0=0x00; 另外8個(gè)數(shù)碼管的總延時(shí)時(shí)間不要超過20ms,所以每一個(gè)數(shù)碼管的延時(shí)建議選用1ms-2ms為宜。 |
qiuqiubuyao 發(fā)表于 2024-9-11 08:13 時(shí)間的操作還有用定時(shí)器吧,顯示方面還好一些,建議使用專用的顯示芯片 |
數(shù)碼管的顯示,要遵循先關(guān)閉,然后驅(qū)動(dòng)segment,然后驅(qū)動(dòng)com,所有共享segment的管都要先關(guān)閉,比如4個(gè)數(shù)字的,6個(gè)數(shù)字一起的,全部都先關(guān)閉com,最后所有數(shù)字配完再開com |
1860774xxxx 發(fā)表于 2024-9-10 19:38 感謝回復(fù),雖然剛開始我也覺得用for會(huì)更加好,但是因?yàn)槲业臄?shù)據(jù)是分時(shí)分秒來著的,如果單單用for來表示b【i】的位置的話,代碼長(zhǎng)度也沒有辦法變短,反而看起來也不夠直觀,所以就直接這樣顯示了,或者您會(huì)有更好的使用方法。 |
xiaobendan001 發(fā)表于 2024-9-10 19:11 感謝回復(fù),我按照您的修改之后顯示確實(shí)好了,之后秒數(shù)的時(shí)間又延長(zhǎng)了,之后在定時(shí)器那里修改之后,時(shí)間問題也基本沒有了,又或者有沒有更好確定時(shí)間精度的辦法呢 |
你的數(shù)碼管顯示代碼里根本就沒有消影,還有,掃描的間隔/延時(shí)太短了 |
qiuqiubuyao 發(fā)表于 2024-9-10 11:49 視覺暫留時(shí)間,它的長(zhǎng)短因人而異,一般在50~200ms。 若數(shù)碼管為N位,驅(qū)動(dòng)位選的信號(hào)頻率應(yīng)大于N*50Hz。 |
數(shù)碼管應(yīng)該用for循環(huán)顯示 如: for(i=0;i<8;i++) { |
數(shù)碼管應(yīng)該用for循環(huán)顯示 如: for(i=0;i<8;i++) { |
在delay(10)之后要換下一位顯示之前要先消隱,比如在移位前先把段驅(qū)動(dòng)P0=0; 要么delay(10)要么delay(10000),搞代碼不要這極端。你還可以試試比如delay(100); 又或者使用定時(shí)器獲得更好的效果。 |
我后面發(fā)現(xiàn)應(yīng)該是延時(shí)的問題,但是當(dāng)我把延時(shí)增加到10000后,屏幕閃爍,這樣它的頻率在肉眼上就不夠快且看著很難受,各位大佬有沒有其他更加好的辦法呢 |
Powered by 單片機(jī)教程網(wǎng)