請問一下,關於4個七段顯示器如何做記數器用 |
答題得分者是:阿信
|
sharkneil
一般會員 發表:27 回覆:33 積分:12 註冊:2005-01-21 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
利用視覺暫留,輪流讓S1~S4亮.掃瞄時間快於幾十ms應該就OK了
亮度不夠應該是電流不太夠,降低你串聯的電阻值就ok 計數功能:
1. 設一變數持續計數
2. 計數值/10,餘數送個位數=>商/10,餘數送十位數 以此類推
3. 再將這些值送到LED顯示
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
7448是共陰7段顯示器驅動IC
S1~S4接負才會亮
亮度問題:
因為4組LED掃描顯示
每個只得到1/4功率
電阻換100歐姆
(如果DSP的輸出電流不夠
就用電晶體驅動) 要顯示的初值設為1234
SEG:要顯示的數字 對應到I/O (送到7448的ABCD,只用低四位元)
COM:掃描的位數 對應到I/O (送到七段顯示器的S1~S4,只用低四位元)
char DispData[4]={1,2,3,4}; unsigned long DispNum=1234; char ScanCnt=0; char ScanLine=0xF7; void ScanLED() { //LED掃描 每隔一段固定時間呼叫一次 一般約1~5mS SEG=DispData[ScanCnt]; // 顯示 COM=ScanLine; // ScanCnt++; // 讓ScanCnt在0~3變化 if (ScanCnt>=4) ScanCnt=0; // ScanLine>>=1; // 讓ScanLine在0xF7,0x7B,0x3D,0x1E變化 if (ScanLine<0x10) ScanLine=0xF7; // 取低四位元 7:0111 B:1011 D:1101 E:1110 // 一次只有一位是 "0" } void UpCounter() { //上數計數 每隔一段固定時間呼叫一次 或收到按鍵呼叫一次 unsigned long DispNum_Temp; DispNum++; // if (DispNum>9999) DispNum=0; // 設定最大數為9999 DispNum_Temp=DispNum; // DispData[3]=DispNum_Temp; // 個位數 DispNum_Temp/=10; // 除10 DispData[2]=DispNum_Temp; // 十位數 DispNum_Temp/=10; // 除10 DispData[1]=DispNum_Temp; // 百位數 DispNum_Temp/=10; // 除10 DispData[0]=DispNum_Temp; // 千位數 }------------------- 美好的事物 稍縱即逝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |