四位數七段顯示器的疑問 |
答題得分者是:src
|
jantribal
一般會員 發表:4 回覆:3 積分:1 註冊:2008-03-11 發送簡訊給我 |
各位前輩們你們好,小弟剛學8051不久,在這想請問一下四位數七段顯示器的小問題。
電路架構是P1接按鈕開關,P0接到七段顯示器的a,b,c,d,e,f,g的腳位,P2_0,P2_1,P2_2,P2_3做電晶體掃描信號。 我的程式是 #include "reg51.h" #define output P0 unsigned char scan ; sbit input1=P1^0; unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; 七段顯示器0~9 delay(int b) { int i,s; for (i=0;i<=b;i ) for (s=0;s<=120;s ) ; } void main() { int count=0,temp1,temp2,temp3,temp4; while (1) { if (input1==1) { delay (20); count=count 1; temp1=seg[count]; 取個位數 temp2=seg[count/10]; 取十位數 temp3=seg[count/100]; 取百位數 temp4=seg[count/1000]; 取千位數 scan=1; output=temp1; P2=~scan; delay (500); scan<<=1; } } } 當我按一下按鈕開關我的程式就加1,我寫這樣可以顯示右邊的數字1、2、3...0,可是我要給它顯示進未下一個位數就是用不出來,要給它顯示到9999的話要怎樣做呢? 我就卡在掃描信號的部分,想了一天一夜試了好久都沒辦法完成。 想在這請叫一下各位前輩!!謝謝 請前輩指導一下~~~感激不盡 |
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
寫程式有時候要參考別人寫的才會學得快,自己想破頭也未必
想得出來. 7-Segment display 看似容易也不容易,所以也不是三言兩語可說清楚, 得配合硬體來寫. 你的問題應該是 display 4 是個 7-segment 上的問題, 也就是說秀 4 個 7-Sgement 要用分時掃描每一個 7-Segment, 例如你要秀 4321, 則要先秀 4, 再秀 3 再秀 2 最後秀1. 所以這個概念沒有大概就很難寫了.長話短說請你先去找這本書, 書內的範例及說明或許對你有幫助. 8051 C語言專題製作 [B068] 作者: 郭庭吉 ISBN:9861291326 504頁 / 套色 / 16開 初版日期:2004-09-29 最新出版日期:2004-09-29 定價:450元 ===================引 用 jantribal 文 章=================== 各位前輩們你們好,小弟剛學8051不久,在這想請問一下四位數七段顯示器的小問題。 電路架構是P1接按鈕開關,P0接到七段顯示器的a,b,c,d,e,f,g的腳位,P2_0,P2_1,P2_2,P2_3做電晶體掃描信號。 我的程式是 #include "reg51.h" #define output P0 unsigned char scan ; sbit input1=P1^0; unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; 七段顯示器0~9 delay(int b) { int i,s; for (i=0;i<=b;i ) for (s=0;s<=120;s ) ; } void main() { int count=0,temp1,temp2,temp3,temp4; while (1) { if (input1==1) { delay (20); count=count 1; temp1=seg[count]; 取個位數 temp2=seg[count/10]; 取十位數 temp3=seg[count/100]; 取百位數 temp4=seg[count/1000]; 取千位數 scan=1; output=temp1; P2=~scan; delay (500); scan<<=1; } } } 當我按一下按鈕開關我的程式就加1,我寫這樣可以顯示右邊的數字1、2、3...0,可是我要給它顯示進未下一個位數就是用不出來,要給它顯示到9999的話要怎樣做呢? 我就卡在掃描信號的部分,想了一天一夜試了好久都沒辦法完成。 想在這請叫一下各位前輩!!謝謝 請前輩指導一下~~~感激不盡 |
naga88
一般會員 發表:0 回覆:13 積分:7 註冊:2008-06-23 發送簡訊給我 |
------
http://tw.myblog.yahoo.com/naga_tooru |
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
[code delphi] #include "reg51.h" #define output P0 unsigned char scan=1; sbit input1=P1^0; unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; //七段顯示器0~9 unsigned char DisplayBuffer[4]={0xc0,0xc0,0xc0,0xc0}; delay(int b) { int i,s; for (i=0;i<=b;i ) for (s=0;s<=120;s ) ; } void main() { unsigned int count=0; char i; bit release; while (1) { if (input1==1) { if(release==1) { release=0; count=count 1; DisplayBuffer[0]=seg[count]; //取個位數 DisplayBuffer[1]=seg[((count00)0)/10]; //取十位數 DisplayBuffer[2]=seg[(count00)/100]; //取百位數 DisplayBuffer[3]=seg[count/1000]; //取千位數 } } else { release=1; } output=DisplayBuffer[i]; P2=~scan; scan<<=1; i ; if(i==4) { i=0; scan=1; } delay (5); } }[/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |