《單片機原理 數(shù)碼管動態(tài)顯示實驗-單片機原理-實驗報告材料》由會員分享,可在線閱讀,更多相關(guān)《單片機原理 數(shù)碼管動態(tài)顯示實驗-單片機原理-實驗報告材料(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word
某某師X學院計算機系
實驗報告
〔2014—2015學年 第 2學期〕
課程名稱 單片機原理
實驗名稱 數(shù)碼管動態(tài)顯示實驗
專 業(yè)計算機科學與技術(shù)〔非師X〕
年 級 2012級
學號 B2012102147 某某 王 秋
指導教師 楊烈君
實驗日期 2015.4.17
實驗?zāi)康模?
1. 鞏固Proteus軟件和Keil軟件的使用方法
2. 學習端口輸入輸出的高級應(yīng)用
2、3. 掌握7段數(shù)碼管的連接方式和動態(tài)顯示法
4. 掌握查表程序和延時等子程序的設(shè)計
實驗要求:
1. 在Proteus軟件中畫好51單片機最小核心電路,包括復位電路和晶振電路
2. 在電路中增加八位7段數(shù)碼管(共陽/共陰自選),將P2口作數(shù)據(jù)輸出口與7段數(shù)碼管數(shù)據(jù)引腳相連 ,P3引腳輸出位選控制信號
3. 在Keil軟件中編寫程序,采用動態(tài)顯示法,實現(xiàn)數(shù)碼管分別顯示數(shù)字1-8
4. 實現(xiàn)指定數(shù)值的顯示 〔可使用 緩存數(shù)值〕
5. 實現(xiàn)類似時鐘的效果,如“ 13-23-25〞 13時23分25秒
6. 實現(xiàn)時鐘的自動計時
7. 擴展要求: 結(jié)合LED顯示,實現(xiàn)帶數(shù)碼
3、顯示的交通燈
實驗設(shè)備〔環(huán)境〕:
1. 計算機
2. Proteus ISIS 7 Professional應(yīng)用程序
3. Keil應(yīng)用程序
實驗內(nèi)容:
數(shù)碼管動態(tài)顯示技術(shù) 要某某現(xiàn):
1. 動態(tài)顯示法,實現(xiàn)數(shù)碼管分別顯示數(shù)字1-8;
2. 實現(xiàn)指定數(shù)值的顯示 〔可使用 緩存數(shù)值〕 〔33355223〕;
3. 實現(xiàn)類似時鐘的效果,如“ 13-23-25〞 13時23分25秒;
4. 實現(xiàn)時鐘的自動計時;
擴展要求: 結(jié)合LED顯示,實現(xiàn)帶數(shù)碼顯示的交通燈;
實驗步驟、實驗結(jié)果與分析:
1 實驗步驟:
2、在“庫〞下拉菜單中,選中“拾取元件〞〔快
4、捷鍵P〕,分別選擇以下元件:AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。
3、構(gòu)建仿真電路:
連接圖
顯示1-8
顯示33355223
時鐘自動計時
連接圖
紅綠燈效果圖1
紅綠燈效果圖2
4、創(chuàng)建一個Keil應(yīng)用程序:新建一個工程項目文件;為工程選擇目標器件〔AT89C52〕;為工程項目創(chuàng)建源程序文件并輸入程序代碼;保存創(chuàng)建的源程序項目文件;把源程序文件添加到項目中。
5、把用戶程序經(jīng)過編譯后生成的HEX文件添加到仿真電路中的處理器中〔編輯元件→文件路徑〕
2 實驗程序 <
5、流程圖>
程序源代碼:
1. 動態(tài)顯示法,實現(xiàn)數(shù)碼管分別顯示數(shù)字1-8;
#include
#define uchar unsigned char
#define uint unsigned int
uchar code Ledcode[]={
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定義一個數(shù)組里面放入1-8
void delay(uint x)
{
while(x--);
}
void main()
{
uchar i;
while(1)
{
6、
for(i=0;i<8;i++)
{
P3=1<
unsigned char code LedCode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40
};
unsigned char D
7、ispBuf[8]={3,3,3,5,5,2,2,3}; //指定要顯示的數(shù)的位置
void delay(unsigned int x){
while(x--);
}
void main()
{
unsigned int i;
for(i=0;i<8;i++){
P3=1<
unsigned char code LedC
8、ode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char Hour=13,Min=23,Sec=25;
unsigned char DispBuf[8];
void delay(unsigned int x)
{
while(x--);
}
void PutTime()
{
DispBuf[7]=Sec%10; //取對應(yīng)秒數(shù)的個位放在最右邊顯示
DispBuf[6]=Sec/10; //取對應(yīng)秒數(shù)的十位放在右起第二位顯示
DispBuf[5]=10; /
9、/此處表示秒跟分之間用橫桿隔開
DispBuf[4]=Min%10;
DispBuf[3]=Min/10;
DispBuf[2]=10;
DispBuf[1]=Hour%10;
DispBuf[0]=Hour/10;
}
void main()
{
long n=0;
while(1)
{
unsigned char i;
PutTime();
for(i=0;i<8;i++)
{
P3=1<
10、
unsigned char code LedCode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char Hour=13,Min=23,Sec=25;
unsigned char DispBuf[8];
void delay(unsigned int x)
{
while(x--);
}
void PutTime()
{
DispBuf[7]=Sec%10;
DispBuf[6]=Sec/10;
DispBuf[5]=10;
DispBuf[4]=Min%10;
Di
11、spBuf[3]=Min/10;
DispBuf[2]=10;
DispBuf[1]=Hour%10;
DispBuf[0]=Hour/10;
}
void main()
{
long n=0;
while(1)
{
unsigned char i,ms; //定義一個ms用于控制秒數(shù)加一的延時
PutTime();
for(i=0;i<8;i++)
{
P3=1<=20)
{
Sec++;ms=0;
}
if
12、(Sec>=60) //表示進位,當秒滿六十如此向分鐘進一,同時秒數(shù)清零
{
Min++;Sec=0;
}
if(Min>=60)
{
Hour++;Min=0;
}
if(Hour>=24) //當小時數(shù)滿24小時時,如此小時數(shù)清零,完成計時
{
Hour=0;
}
}
}
5. 擴展要求: 結(jié)合LED顯示,實現(xiàn)帶數(shù)碼顯示的交通燈;
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
#define Disp_Null 10
uchar code Le
13、dCode[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar DispBuf[8];
sbit r1=P2^0;sbit y1=P2^1;sbit g1=P2^2;
sbit r2=P2^3;sbit y2=P2^4;sbit g2=P2^5;
uchar sec1;sec2;sec;
void delay(uint x)
{
while(x--);
}
void PntTime( )
{
DispBuf[3]=sec2 % 10;
DispBuf[2]
14、=sec2 / 10;
DispBuf[1]=sec1 % 10;
DispBuf[0]=sec1 / 10;
}
void display()
{
uchar i;
for (i = 0;i < 8;i ++)
{
P3=0;
P1=~LedCode[ DispBuf[i] ];
P3=1<
15、play();
ms++;
if( ms >=60){
ms=0;
sec=(sec+1) % 60; //定義一個計數(shù)變量,使其一直保持在60內(nèi)
}
if( sec <20){ //sec在20以內(nèi)時g2、r1亮
sec1=20-sec; sec2=30-sec;
r1=1;y1=0;g1=0;
r2=0;y2=0;g2=1;
}
if(sec>=20 && sec<30){ //sec在20與30之間時y2、r1亮
sec1=30-sec; sec2=30-sec;
r1=1;y1=0;g1=0;
16、
r2=0;y2=1;g2=0;
}
if(sec>=30 && sec<50){ //g1、r2在sec增加20內(nèi)亮
sec1=60-sec; sec2=50-sec;
r1=0;y1=0;g1=1;
r2=1;y2=0;g2=0;
}
if(sec>=50){
sec1=60-sec; sec2=60-sec;
r1=0;y1=1;g1=0;
r2=1;y2=0;g2=0;
}
}
}
過程總結(jié):
本實驗是將單片機的P2口做為輸出口,將四個數(shù)碼管的七段引腳分別接到P2.0
17、至P2.7.由于電路中采用共陽極的數(shù)碼管,所以當P2端口相應(yīng)的引腳為0時,對應(yīng)的數(shù)碼管段點亮。程序中預設(shè)了數(shù)字0-9的段碼。由于是讓八個數(shù)碼管顯示不同的數(shù)值,所以要用掃描的方式來實現(xiàn)。因此可定義掃描函數(shù),接到單片機的P3口。
在實驗中,預設(shè)的數(shù)字段碼表存放在數(shù)組LedCode中,由于段碼表是固定的,因此存儲類型可設(shè)為code.在Proteus軟件中按照要求畫出電路,再利用Keil軟件按需要實現(xiàn)的功能編寫c程序,生成Hex文件,把Hex文件導到Proteus軟件中進展仿真。
心得體會:
實驗數(shù)碼管顯示程序的編程方法
1〕先準備好要顯示的數(shù)據(jù),放入相應(yīng)的顯示存儲單元中。
2〕根據(jù)要使用的
18、數(shù)碼管的具體位置來確定掃描初值和掃描方向。
3〕根據(jù)使用數(shù)碼管的個數(shù)來確定掃描的位數(shù)。
4〕查表將要顯示的數(shù)據(jù)轉(zhuǎn)換為能使數(shù)碼管正確顯示相對應(yīng)的段碼。
5〕分時送段碼和位碼,數(shù)碼管開始循環(huán)顯示。
指導教師評語:
1、完成所有規(guī)定的實驗內(nèi)容,實驗步驟正確,結(jié)果正確;
2、完成絕大局部規(guī)定的實驗內(nèi)容,實驗步驟正確,結(jié)果正確;
3、完成大局部規(guī)定的實驗內(nèi)容,實驗步驟正確,結(jié)果正確;
評定等級:A〔優(yōu)秀〕 B〔良好〕 C〔中等〕 D〔與格〕 E〔不與格〕
成績評定
教師簽字
年月日
備注:
注:1、報告內(nèi)的項目或設(shè)置,可根據(jù)實際情況加以補充和調(diào)整
2、教師批改學生實驗報告應(yīng)在學生提交實驗報告10日內(nèi)
15 / 15