全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6771
推到 Plurk!
推到 Facebook!

四位數七段顯示器的疑問

答題得分者是:src
jantribal
一般會員


發表:4
回覆:3
積分:1
註冊:2008-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-29 00:21:17 IP:114.47.xxx.xxx 訂閱
各位前輩們你們好,小弟剛學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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-29 06:46:47 IP:61.229.xxx.xxx 訂閱
 寫程式有時候要參考別人寫的才會學得快,自己想破頭也未必
想得出來. 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-29 14:06:16 IP:60.249.xxx.xxx 訂閱
------
http://tw.myblog.yahoo.com/naga_tooru
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-29 14:26:13 IP:61.216.xxx.xxx 訂閱

[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]
系統時間:2024-04-28 20:01:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!