單原理,數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)單原理實(shí)驗(yàn)報(bào)告_第1頁
單原理,數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)單原理實(shí)驗(yàn)報(bào)告_第2頁
單原理,數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)單原理實(shí)驗(yàn)報(bào)告_第3頁
單原理,數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)單原理實(shí)驗(yàn)報(bào)告_第4頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、單原理,數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)單原理實(shí)驗(yàn)報(bào)告 寧德師范學(xué)院計(jì)算機(jī)系 實(shí)驗(yàn)報(bào)告 (20212021 學(xué)年 第 2 學(xué)期) 課程名稱 單片機(jī)原理 實(shí)驗(yàn)名稱 數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn) 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)(非師范) 年 級(jí) 2021 級(jí) 學(xué)號(hào) b2021102147 姓名 王 秋 指導(dǎo)教師 楊烈君 實(shí)驗(yàn)日期 2021.4.17 實(shí)驗(yàn)?zāi)康?: 1. 鞏固 proteus 軟件和 keil 軟件的使用方法 2. 學(xué)習(xí)端口輸入輸出的高級(jí)應(yīng)用 3. 掌握 7 段數(shù)碼管的連接方式和動(dòng)態(tài)顯示法 4. 掌握查表程序和延時(shí)等子程序的設(shè)計(jì) 實(shí)驗(yàn) 要求: 1. 在 proteus 軟件中畫好 51 單片機(jī)最小核心電路,包括復(fù)位

2、電路和晶振電路 2. 在電路中增加八位 7 段數(shù)碼管(共陽/共陰自選),將 p2 口作數(shù)據(jù)輸出口與 7 段數(shù)碼管數(shù)據(jù)引 腳相連 ,p3 引腳輸出位選控制信號(hào) 3. 在 keil 軟件中編寫程序,采用動(dòng)態(tài)顯示法,實(shí)現(xiàn)數(shù)碼管分別顯示數(shù)字 1-8 4. 實(shí)現(xiàn)指定數(shù)值的顯示 (可使用 緩存數(shù)值) 5. 實(shí)現(xiàn)類似時(shí)鐘的效果,如" 13-23-25' 13 時(shí) 23 分 25 秒 6. 實(shí)現(xiàn)時(shí)鐘的自動(dòng)計(jì)時(shí) 7. 擴(kuò)展要求: 結(jié)合 led 顯示,實(shí)現(xiàn)帶數(shù)碼顯示的交通燈 實(shí)驗(yàn)設(shè)備(環(huán)境): 1(計(jì)算機(jī) 2(proteus isis 7 professional 應(yīng)用程序 3(keil 應(yīng)用程

3、序 實(shí)驗(yàn)內(nèi)容: 數(shù)碼管動(dòng)態(tài)顯示技術(shù) 要求實(shí)現(xiàn): 1(動(dòng)態(tài)顯示法,實(shí)現(xiàn)數(shù)碼管分別顯示數(shù)字 1-8; 2(實(shí)現(xiàn)指定數(shù)值的顯示 (可使用 緩存數(shù)值) (33355223); 3(實(shí)現(xiàn)類似時(shí)鐘的效果,如" 13-23-25' 13 時(shí) 23 分 25 秒; 4(實(shí)現(xiàn)時(shí)鐘的自動(dòng)計(jì)時(shí); 擴(kuò)展要求: 結(jié)合 led 顯示,實(shí)現(xiàn)帶數(shù)碼顯示的交通燈; 實(shí)驗(yàn)步驟、實(shí)驗(yàn)結(jié)果及分析: 1 實(shí)驗(yàn)步驟: 1、使用 proteus isis 7 professional 應(yīng)用程序,建立一個(gè).dsn 文件 2、在"庫'下拉菜單中,選中"拾取元件'(快捷鍵 p),分別選擇以下

4、元件:at89c51、cap、cap-elec、 crystal、respack-8。 3、構(gòu)建仿真電路: 連接圖 顯示 1-8 顯示 33355223 顯示時(shí)間 13.23.25 時(shí)鐘自動(dòng)計(jì)時(shí) 連接圖 紅綠燈效果圖 1 紅綠燈效果圖 2 4、創(chuàng)建一個(gè) keil 應(yīng)用程序:新建一個(gè)工程項(xiàng)目文件;為工程選擇目標(biāo)器件(at89c52);為工程項(xiàng)目創(chuàng)建源程序文件并輸入程序代碼;保存創(chuàng)建的源程序項(xiàng)目文件;把源程序文件添加到項(xiàng)目中。 5、把用戶程序經(jīng)過編譯后生成的 hex 文件添加到仿真電路中的處理器中(編輯元件?文件路徑) 2 實(shí)驗(yàn)程序 流程圖 開始 定義數(shù)組 開始 ledcode開始 定義數(shù)組 定義

5、數(shù)組 定義數(shù)組 dispbugledcodeledcode存放指定數(shù) while 定義 dispbugwhile(1)存放指定數(shù)(1)yyfor 定義子函數(shù) forn(i=0;i8(i=0;i8puttime(),.,調(diào)用延 yy 時(shí)函數(shù) p3=1ip3=1iwhile(1)i+p2=ledcop2=ledcodedispbudeifiputtime()p2=ledcodedispbufii+i+ for 調(diào)用延時(shí) n 調(diào)用延時(shí)(i=0;ip3=1i 函數(shù)函數(shù) 8)y 開始 p3=1isbit r1=p20;.sbit g2=p25;p2=ledcodedispbufi定義數(shù)組 ledcode

6、i+ 調(diào)用延時(shí)定義 dispbug函數(shù)存放指定數(shù) if(ms=60)定義子函數(shù) yputtime()comsec=(com,.,sec+1) % 60;,ms=0 while(1)if(comsec 20) yy sec1=20-comsec;puttime()sec2=30-comsec;r1=1;y1=0;g1=0;r2=0;y2=0;g2=1; yforif(comsec=20 (i=0;i8) comsec30)sec1=60-comsec;sec1=30-comsec;sec2=60-comsec;sec2=30-comsec;r1=0;y1=1;g1=0;r1=1;y1=0;g1=

7、0;r2=1;y2=0;g2=0;r2=0;y2=1;g2=0; y if(comsec=30 if(comsec60) comsec50) sec1=60-comsec;ysec2=50-comsec;r1=0;y1=0;g1=1;r2=1;y2=0;g2=0; 程序源代碼: 1(動(dòng)態(tài)顯示法,實(shí)現(xiàn)數(shù)碼管分別顯示數(shù)字 1-8; #includereg51.h #define uchar unsigned char #define uint unsigned int uchar code ledcode= 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;

8、 /定義一個(gè)數(shù)組里面放入 1-8 void delay(uint x) while(x-); void main() uchar i; while(1) for(i=0;i8;i+) p3=1i; /p3 口表示從第一個(gè)位開始顯示數(shù)值 p2=ledcodei; /p2 口用來顯示所需要顯示的數(shù)值 delay(500); 2. 實(shí)現(xiàn)指定數(shù)值的顯示 (可使用 緩存數(shù)值) (33355223); #includereg51.h unsigned char code ledcode= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40 ; un

9、signed char dispbuf8=3,3,3,5,5,2,2,3; /指定要顯示的數(shù)的位置 void delay(unsigned int x) while(x-); void main() unsigned int i; for(i=0;i8;i+) p3=1i; p2=ledcodedispbufi; /顯示指定數(shù)的位置 delay(500); 3. 實(shí)現(xiàn)類似時(shí)鐘的效果,如" 13-23-25' 13 時(shí) 23 分 25 秒; #includereg51.h unsigned char code ledcode= 0x3f,0x06,0x5b,0x4f,0x66,

10、0x6d,0x7d,0x07,0x7f,0x6f,0x40; unsigned char hour=13,min=23,sec=25; unsigned char dispbuf8; void delay(unsigned int x) while(x-); void puttime() dispbuf7=sec%10; /取對(duì)應(yīng)秒數(shù)的個(gè)位放在最右邊顯示 dispbuf6=sec/10; /取對(duì)應(yīng)秒數(shù)的十位放在右起第二位顯示 dispbuf5=10; /此處表示秒跟分之間用橫桿隔開 dispbuf4=min%10; dispbuf3=min/10; dispbuf2=10; dispbuf1=

11、hour%10; dispbuf0=hour/10; void main() long n=0; while(1) unsigned char i; puttime(); for(i=0;i8;i+) p3=1i; p2=ledcodedispbufi; delay(500); 4. 實(shí)現(xiàn)時(shí)鐘的自動(dòng)計(jì)時(shí); #includereg51.h unsigned char code ledcode= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; unsigned char hour=13,min=23,sec=25; unsigned

12、char dispbuf8; void delay(unsigned int x) while(x-); void puttime() dispbuf7=sec%10; dispbuf6=sec/10; dispbuf5=10; dispbuf4=min%10; dispbuf3=min/10; dispbuf2=10; dispbuf1=hour%10; dispbuf0=hour/10; void main() long n=0; while(1) unsigned char i,ms; /定義一個(gè) ms 用于控制秒數(shù)加一的延時(shí) puttime(); for(i=0;i8;i+) p3=1

13、i; p2=ledcodedispbufi; delay(500); ms+; /控制加一的時(shí)延 if(ms=20) sec+;ms=0; if(sec=60) /表示進(jìn)位,當(dāng)秒滿六十則向分鐘進(jìn)一,同時(shí)秒數(shù)清零 min+;sec=0; if(min=60) hour+;min=0; if(hour=24) /當(dāng)小時(shí)數(shù)滿 24 小時(shí)時(shí),則小時(shí)數(shù)清零,完成計(jì)時(shí) hour=0; 5. 擴(kuò)展要求: 結(jié)合 led 顯示,實(shí)現(xiàn)帶數(shù)碼顯示的交通燈; #include reg52.h #define uint unsigned int #define uchar unsigned char #define d

14、isp_null 10 uchar code ledcode= 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x40; uchar dispbuf8; sbit r1=p20;sbit y1=p21;sbit g1=p22; sbit r2=p23;sbit y2=p24;sbit g2=p25; uchar sec1;sec2;comsec; void delay(uint x) while(x-); void pnttime( ) dispbuf3=sec2 % 10; dispbuf2=sec2 / 10; dispbuf1=se

15、c1 % 10; dispbuf0=sec1 / 10; void display() uchar i; for (i = 0;i 8;i +) p3=0; p1=ledcode dispbufi ; p3=1i; delay(100) ; void main () while(1) uchar ms; pnttime(); display(); ms+; if( ms =60) ms=0; comsec=(comsec+1) % 60; /定義一個(gè)計(jì)數(shù)變量,使其一直保持在60 內(nèi) if( comsec 20) /comsec 在 20 以內(nèi)時(shí) g2、r1 亮 sec1=20-comsec;

16、sec2=30-comsec; r1=1;y1=0;g1=0; r2=0;y2=0;g2=1; if(comsec=20 comsec30) /comsec 在 20 與 30 之間時(shí)y2、r1 亮 sec1=30-comsec; sec2=30-comsec; r1=1;y1=0;g1=0; r2=0;y2=1;g2=0; if(comsec=30 comsec50) /g1、r2 在 comsec 增加 20內(nèi)亮 sec1=60-comsec; sec2=50-comsec; r1=0;y1=0;g1=1; r2=1;y2=0;g2=0; if(comsec=50) sec1=60-com

17、sec; sec2=60-comsec; r1=0;y1=1;g1=0; r2=1;y2=0;g2=0; 過程總結(jié): 本實(shí)驗(yàn)是將單片機(jī)的 p2 口做為輸出口,將四個(gè)數(shù)碼管的七段引腳分別接到 p2.0 至p2.7.由于電路中采用共陽極的數(shù)碼管,所以當(dāng) p2 端口相應(yīng)的引腳為 0 時(shí),對(duì)應(yīng)的數(shù)碼管段點(diǎn)亮。程序中預(yù)設(shè)了數(shù)字 0-9 的段碼。由于是讓八個(gè)數(shù)碼管顯示不同的數(shù)值,所以要用掃描的方式來實(shí)現(xiàn)。因此可定義掃描函數(shù),接到單片機(jī)的 p3 口。 在實(shí)驗(yàn)中,預(yù)設(shè)的數(shù)字段碼表存放在數(shù)組 ledcode 中,由于段碼表是固定的,因此存儲(chǔ)類型可設(shè)為 code.在 proteus 軟件中按照要求畫出電路,再利用 keil 軟件按需要實(shí)現(xiàn)的功能編寫 c 程序,生成 hex 文件,把 hex 文件導(dǎo)到 proteus 軟件中進(jìn)行仿真。 心得體會(huì): 實(shí)驗(yàn)數(shù)碼管顯示程序的編程方法 1)先準(zhǔn)備好要顯示的數(shù)據(jù),放入相應(yīng)的顯示存儲(chǔ)單元中。 2)根據(jù)要使用的數(shù)碼管的具體位置來確定掃描初值和掃描方向。 3)根據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論