《單片機技術與應用》課件全套 項目1-7 智能霓虹燈設計- 數字電壓表設計_第1頁
《單片機技術與應用》課件全套 項目1-7 智能霓虹燈設計- 數字電壓表設計_第2頁
《單片機技術與應用》課件全套 項目1-7 智能霓虹燈設計- 數字電壓表設計_第3頁
《單片機技術與應用》課件全套 項目1-7 智能霓虹燈設計- 數字電壓表設計_第4頁
《單片機技術與應用》課件全套 項目1-7 智能霓虹燈設計- 數字電壓表設計_第5頁
已閱讀5頁,還剩774頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目一智能霓虹燈設計項目目標項目目標是用單片機的IO口驅動LED,實現流水燈效果。

認識單片機任務一單片機開發軟件-Keil任務三

Keil和Proteus的聯合使用任務四點亮LED并實現閃爍任務五左移右移實現流水燈任務六

任意花樣霓虹燈任務七單片機最小系統任務二任務一認識單片機明確任務智能電子產品在當今社會生活中層出不窮,比如智能冰箱、智能洗衣機、智能手機等等。這些都是智能電子產品,智能電子產品的核心就是單片機。

核心是單片機。那么什么是單片機?有哪些應用?單片機基本組成是什么?知識鏈接一什么是單片機二單片機的發展史三單片機的典型應用一什么是單片機電腦:面向應用單片機:面向控制單芯片微型計算機,它是把組成微型計算機的各功能部件:CPU,存儲器,I/O口等部件制作在一塊集成芯片上。1.定義2.組成二單片機的發展史MCS-48Intel公司MCS-51Intel公司87LPC飛利浦W78L偉邦DS87達拉斯GSM97現代……為什么學MCS-51?三單片機的典型應用1.智能儀器儀表中的應用2.工業控制中的應用3.消費電子產品中的應用在調制解調器、各類手機、傳真機、程控電話交換機、信息網絡及各種通訊設備中,單片機也已經得到廣泛應用。4.計算機網絡和通信領域中的應用

5.醫用設備領域中的應用6.各種大型電器中的模塊化工業控制中的應用7.汽車設備領域中的應用8.軍事技術領域的應用知識總結1.單片機的基本組成2.單片機的發展歷史3.單片機的典型應用綜合評價課后作業單片機主要由哪些部分組成?謝謝觀看《單片機技術與應用》課程任務二

單片機最小系統任務描述熟悉單片機的最小系統構成。知識鏈接一單片機型號識別二單片機的引腳功能三單片機的最小系統一單片機型號識別STC:宏晶公司(深圳)8:8位機9:采用flashROM程序存儲器C:CMOS工藝(低功耗)52:片內ROM的容量為2*4KB40:最大晶振頻率40MHZC:商業級PDIP:采用兩排針插式封裝0826:生產日期08年第26周例如:STC89C52RC40C-PDIP

0826

工作溫度范圍:工業級:-40℃~85℃商業級:0℃~70℃軍用級:-55℃~125℃思考:小明有一個好朋友住在北方,剛接觸單片機很有興趣,托小明幫忙買塊單片機好練習編程。你能幫小明挑一塊合適的芯片嗎?請說明理由。北方:工業級剛接觸:51系列或52系列練習:采用flashROM、國產STC89C5140I-PDIP二單片機的引腳功能缺口朝上引腳編號走向

(1)電源引腳:VCC和VSS共用地端電源輸入端(+5V)

(2)時鐘電路引腳(2個):XTAL1和XTAL2時鐘電路引腳

(3)編程控制引腳:RST和EA外接高電平VCC

訪問片內ROM

連續兩個機器周期(約2us)的高電平,完成一次復位操作

(4)并行I/O口(32個):P0,P1,P2,P3

外接LED、按鍵、數碼管、繼電器、蜂鳴器等外圍設備。三單片機最小系統單片機正常工作的最小硬件要求,包括電源電路、時鐘電路、復位電路。1.電源電路

AT89C51單片機的工作電壓范圍:4.0V—5.5V,所以通常給單片機外接5V直流電源。連接方式為:AT89C51單片機VCCVSS+5VGNDVCC(40腳):接電源+5V端VSS(20腳):接電源地端2.時鐘電路時鐘電路就是振蕩電路,向單片機提供一個正弦波信號作為基準,決定單片機的執行速度。AT89C51單片機時鐘頻率范圍:0~33MHz。時鐘電路連接方式為:XTAL1(19腳)與XTAL2(18腳):接一個晶振電容C1和C2起穩定作用。晶振:石英晶體振蕩器的簡稱,通常用來構成振蕩電路,產生各種頻率信號。晶振晶振作用產生基準脈沖信號使單片機執行各種動作和指令時能正常工作瓷片電容兩只電容必須相同,保證晶振成功起振并穩定工作。011101011111000000000011那么就會得到一串機器碼:011101010011000001010101在沒有基準脈沖的情況下,你能判斷這段機器碼是什么嗎?如果有了基準脈沖呢?這是一段機器碼,即發給單片機的指令。結論:單片機要正確執行各種動作和指令離不開基準脈沖。3.復位電路復位電路產生復位信號,使單片機從固定的起始狀態開始工作,完成單片機的“啟機”過程。

AT89C51單片機復位信號是高電平有效,通過RST/VPD(9腳)輸入。復位電路連接方式有兩種。(1)上電復位單片機接通電源時產生復位信號,完成單片機啟動,確定單片機起始工作狀態。(2)手動復位

手動按鍵產生復位信號,完成單片機啟動,確定單片機的初始狀態。通常在單片機工作出現混亂或“死機”時,使用手動復位可實現單片機“重啟”。知識總結單片機的型號識別單片機的外部引腳3.單片機的最小系統綜合評價課后作業1.請說明STC89c51RC40I-PDIP1012這一標識代表的含義?2.請畫出單片機最小系統電路圖。謝謝觀看《單片機技術與應用》課程任務三單片機開發軟件-Keil任務描述開發環境的搭建是開發的基礎,工欲善其事,必先利其器。這里首先介紹單片機開發使用到的軟件:KEIL。知識鏈接一Keil的基本使用二Keil的打印輸出一Keil的基本使用(1)在桌面上找到KeiluVision4軟件,雙擊打開。1.KeilμVision4新建工程(2)新建工程、選擇目錄、輸入工程名,如下圖:工程文件注意保存到自己需要的磁盤目錄下,比如這里保存為D:\單片機工程目錄下。彈出的對話框中,選擇Atmel公司的芯片,選擇Atmel,點擊Atmel前面的加號,如下圖。(3)芯片選擇2.新建源程序文件保存的時候,后綴名要為”.c”,表示我們這里寫的是C語言,如下圖所示。

具體方法是:選中“SourceGroup1”菜單,再單擊鼠標右鍵,在彈出的對話框中,選擇“AddFilesto‘SourceGroup1’”,表示準備添加源文件到工程,如右圖所示:3.源文件添加到工程中在彈出的“AddFilestoGroup‘SourceGroup1’對話框中,選擇一個C文件,如“點亮LED.c”,點擊“Add”按鈕,只需點擊一次即可,如上圖所示。在右邊編輯器中開始輸入如下代碼,如圖所示,程序書寫完畢,別忘記點保存。編譯C文件,在Target上點擊鼠標右鍵,在下拉菜單中選擇“OptionsforTarget‘Target1’”,如圖所示:4.編譯并生成hex文件點擊菜單欄上面的project->optionsforTarget‘Target1’...在彈出的對話框中修改Xtal(MHz)中的內容即可。在output選項中必須選擇“CreateHEXFile”,如圖所示。保存以后,就可以點下圖中的編譯,或者按快捷鍵F7,如圖所示。完成上面的步驟后,在信息窗口會看到輸出以下對話信息,如圖所示。在工程所在的文件夾下會看到生成有.hex文件,如圖所示:二Keil的打印輸出具體步驟:1、編譯調試好程序,確保沒有錯誤。2、進入DebugSessin(調試會話)模式3、勾選TI和RI4、打印輸出的結果知識總結1.Keil編寫程序的一般步驟:(1)新建工程;(2)新建源程序文件;(3)把源程序添加到工程中;(4)編譯并生成hex文件。2.Keil的打印輸出綜合評價課后作業

在keil中新建工程,命名為任務3,輸入下面程序,并編譯生成HEX文件。#include<reg51.h>SbitLED=P1^0;Voidmain(void){while(1){LED=0;}}謝謝觀看《單片機技術與應用》課程任務四Keil和Proteus的聯合使用任務描述開發環境的搭建是開發的基礎,工欲善其事,必先利其器。這里首先介紹單片機開發使用到的軟件:Proteus。知識鏈接Proteus軟件的基本使用Proteus軟件的基本使用(1)查找元件1.放置元件

具體方法是:首先點擊啟動界面區域中的“P”按鈕(PickDevices,對象選擇按鈕)來打開“PickDevices”(拾取元器件)對話框從元件庫中拾取所需的元器件。對話框如右圖所示:(2)查找元件界面NOTE

查找常用元器件的關鍵字電容CAP(CAPACITOR)排阻RESPACK蜂鳴器BUZZER有極性電容

CAPACITORPOL發光二極管LED-數碼管7SEG-時鐘信號源CLOCK晶體振蕩器XTAL7段LEDDPY_7-SEG_DP電阻RES三極管PNP,NPN揚聲器

SPEAKER可變電阻POT觸發開關BUTTON液晶LM馬達MOTOR按鈕

SWITCH點陣matrix(3)放置元器件2.元件布局3.連線4.單片機綁定hex文件任務實施1.硬件電路2.軟件設計一硬件電路強調:圖中的單片機元件沒有“VCC”和“GND”引腳,這是因為在Proteus軟件中,元件模型中的“電源”和“地”已經進行了連接,“VCC”接到了“+5V”電源,“GND”接到了“地”,所以隱藏了這兩個引腳。二程序設計#include<reg51.h>//引入頭文件sbitLED=P1^0;//P1.0引腳定義為變量LEDmain()//主程序開始{While(1)

{LED=0;//點亮LED}}知識總結Proteus使用的一般步驟:(1)放置元件;(2)元件布局;(3)連線;(4)綁定hex文件綜合評價課后作業

在Keil軟件中編寫本次任務的程序代碼,在proteus軟件中繪制仿真電路圖,完成任務實施內容。謝謝觀看《單片機技術與應用》課程任務五點亮LED并實現閃爍任務描述單片機P1.0引腳接一發光二極管(LED),點亮此LED,并實現閃爍。知識鏈接一單片機的硬件結構二發光二極管(LED)介紹三點亮LED四LED如何實現閃爍一單片機的硬件結構中央處理器CPU:8位,運算和控制功能內部RAM:共256個RAM單元,用戶使用前128個單元,用于存放可讀寫數據,后128個單元被專用寄存器占用。內部ROM:4KB掩膜ROM,用于存放程序、原始數據和表格。定時/計數器:兩個16位的定時/計數器,實現定時或計數功能。并行I/O口:4個8位的I/O口P0、P1、P2、P3。串行口:一個全雙工串行口。中斷控制系統:5個中斷源(外中斷2個,定時/計數中斷2個,串行中斷1個)時鐘電路:可產生時鐘脈沖序列,允許晶振頻率6MHz和12MHz時鐘電路CPUROMRAMT0T1中斷系統串行接口并行接口P0P1P2P3TXDRXDINT0INT1定時計數器復位電路P3口各引腳第二功能表引腳第二功能功能說明P3.0RXD串行口輸入P3.1TXD串行口輸出P3.2INT0外部中斷0輸入P3.3INT1外部中斷1輸入P3.4T0定時器/計數器0計數輸入P3.5T1定時器/計數器1計數輸入P3.6WR片外RAM寫選通信號(輸出)P3.7RD片外RAM讀選通信號(輸入)二發光二極管(LED)介紹發光二極管:單向導電性,通過5mA左右電流即可發光,電流越大,亮度越強,但若電流過大會燒毀二極管,一般控制在3~20mA。

工作電壓紅色發光二極管:1.7-2.5V綠色發光二極管:2.0-2.4V黃色發光二極管:1.9-2.4V藍/白色發光二極管:3.0-3.8VPx.yVCCPx.yVCCVCC1.硬件電路三點亮LED2.程序設計

#include<reg51.h>//引入頭文件sbitLED=P1^0;//P1.0引腳定義為變量LEDmain()//主程序開始{while(1)

{LED=1;//點亮LED}}四LED如何實現閃爍LED閃爍的實質就是實現一亮一滅,前面實現了點亮LED,如何實現熄滅呢?

向P1.0送低電平便可以實現熄滅思考對策閃爍即亮滅亮滅亮滅…亮:P1.0輸出高電平滅:P1.0輸出低電平若亮滅之間沒有間隔會怎么樣?要加延時程序,讓亮和滅都持續一段時間?軟件實現思路:點亮發光二極管延時(延時子程序)熄滅發光二極管延時(延時子程序)重復上述動作(循環)程序設計#include<reg51.h>//引入頭文件sbitLED=P1^0;//P1.0引腳定義為LED變量voidmydelayms(unsignedintxms)

//定義延時函數;定義形參xms{unsignedinti,j;

//定義無符號整型變量i,jfor(i=0;i<xms;i++)//定義第一重for循壞

for(j=0;j<120;j++);//定義第二重for循環}voidmain(void)//主程序開始{while(1)//一直循環執行下面兩條指令

{

LED=1; //點亮LEDmydelayms(5);

LED=0;//熄滅LEDmydelayms(5);

}}任務小結單片機可以向某個IO引腳輸出高電平或低電平,這個電平加在發光二極管的一端,另一端接外部電路的電源或地,就可以單片機控制LED燈的亮或滅。在點亮或熄滅后加延時函數,即可實現LED的閃爍。綜合評價課后作業請用單片機驅動一個LED的亮滅,時間間隔兩秒,實現閃爍。謝謝觀看《單片機技術與應用》課程任務六左移右移實現流水燈任務描述用AT89C51的P1口,接8只LED,即D1,D2,…,D7,D8,編寫程序,使得8只LED循環點亮,時間間隔1秒,即剛開始點亮D1,1秒后點亮D2,接著點亮D3,D4,…,D8,然后點亮D7,D6,…,D2,D1,重復循環。知識鏈接一單片機時序的概念二移位函數實現流水燈一單片機時序的概念單片機內的各種操作都是在一系列脈沖控制下進行的,而各脈沖在時間上是有先后順序的,這種順序就稱為時序。單片機的時序定時單位從小到大依次為:振蕩周期、狀態周期、機器周期和指令周期。振蕩周期是指晶體振蕩器直接產生的振蕩信號的周期,是振蕩頻率fosc的倒數,用P表示。

狀態周期(或時鐘周期S)是振蕩周期的兩倍,它分為P1節拍和P2節拍。1個機器周期是由6個狀態周期構成,12個振蕩周期。執行一條指令所需的時間稱為指令周期。

若MCS-51單片機外接晶振為12MHz時,則單片機的四個周期的具體值為:振蕩周期=1/12MHz=1/12μs=0.0833μs時鐘周期=1/6μs=0.167μs機器周期=1μs指令周期=1~4μs二移位函數實現流水燈單片機實現霓虹燈也可以通過KeilC51的移位函數_crol_和_cror_函數來完成。_crol_,_cror_:將char型變量循環向左(右)移動指定位數后返回;_irol_,_iror_:將int型變量循環向左(右)移動指定位數后返回;_lrol_,_lror_:將long型變量循環向左(右)移動指定位數后返回。舉例說明a=10001000;

a=_crol_(a,1);//左移一位

//程序執行后,a=00010001a=00010001a=_cror_(a,2);

//右移兩位

//程序執行后,a=01000100

提示請用移位函數來實現一下LED流水燈效果,使用請用“#include<intrins.h>”這個指令引入intrins.h頭文件。任務實施1.硬件電路2.程序設計1.硬件電路2.程序設計#include<reg52.h>//包含單片機寄存器的頭文件#include<intrins.h>//包含_cror_和_crol_函數#defineuintunsignedint//宏定義,定義uint為無符號整型變量#defineucharunsignedchar//宏定義,定義uchar為無符號字符變量uchari,j;//定義變量i,jvoiddelay1s(void){uchara,b,c;//定義循環變量

for(c=167;c>0;c--)for(b=171;b>0;b--)for(a=16;a>0;a--);

}延時時間為1秒的延時函數voidmain(){while(1)//一直執行

{j=0x01;

for(i=0;i<8;i++)

{P1=~j;//左移的值送P1口

delay1s();//延時1s

j=

_crol

_(j,1);

//左移1位

}主函數for(i=0;i<8;i++)

{P1=~j;//接上面左移的值送P1口delay1s();//延時1s

j=

_cror_(j,1);

//右移一位

}

}}任務小結流水燈亮燈比較有規律,8個LED中7個熄滅,1個點亮,1秒后,向前或向后移動一個位置亮另外一個燈,如此循環,容易用for和移位函數來實現。綜合評價課后作業AT89C51的時鐘周期、機器周期、指令周期是如何定義的?當振蕩頻率為6MHz時,一個機器周期為多少微秒?謝謝觀看《單片機技術與應用》課程任務七任意花樣霓虹燈任務描述用AT89C51的P2口,接8只LED,把亮燈的花樣放到數組中,實現3種以上的流水燈花樣。知識鏈接

C51的數據類型C51的數據類型1.char字符類型char類型的長度是一個字節,通常用于定義字符數據的變量或常量。分為無符號字符類型unsignedchar和有符號字符類型signedchar,默認值為signedchar類型。unsignedchar類型范圍是0~255。signedchar類型范圍是-128~+127。2.int整型int整型長度為兩個字節,用于存放一個雙字節數據。分為有符號int整型數signedint和無符號整型數unsignedint,默認值為signedint類型。signedint表示的數值范圍是-32768~+32767。unsignedint表示的數值范圍是0~65535。3.long長整型long長整型長度為四個字節,用于存放一個四字節數據。分為有符號long長整型signedlong和無符號長整型unsignedlong,默認值為signedlong類型。4.float浮點型單精度雙精度5.指針型指針型本身就是一個變量,在這個變量中存放指向另一個數據的地址。指針變量占據一定的內存單元,對不同的處理器長度也不盡相同,在C51中它的長度一般為1~3個字節6.sfr特殊功能寄存器sfr也是一種擴充數據類型,占用一個內存單元,值域為0~255。7.sfr1616位特殊功能寄存器sfr16占用兩個內存單元,值域為0~65535。8.bit位標量bit位標量是C51編譯器的一種擴充數據類型,利用它可定義一個位標量,但不能定義位指針,也不能定義位數組。它的值是一個二進制位,不是0就是1,類似一些高級語言中的Boolean類型中的True和False。9.sbit可位尋址sbit可位尋址是C51中的一種擴充數據類型。利用它可以訪問芯片內部的RAM中的可尋址位或特殊功能寄存器中的可尋址位。10.數據類型說明任務實施1.硬件電路2.程序設計1.硬件電路2.程序設計#include"reg51.h“#defineuintunsignedint#defineucharunsignedchar/**********ms級延時函數***********/voiddelay(unsignedintxms){uinti,j;for(i=xms;i>0;i--)for(j=120;j>0;j--);}/**********主函數***********/voidmain(){uinti;

uchardisplay[]={0xe7,0xdb,0xbd,0x7e};

while(1)//一直執行

{

for(i=0;i<4;i++)//循環4次

{

P2=display[i];

delay(400);//延時

}

}}項目小結本項目通過7個任務完成了智能霓虹燈的設計,介紹了單片機最小系統的構成、keil軟件以及proteus軟件的基本使用、實現了LED點亮,閃爍,左右移和任意花樣效果。綜合評價課后作業AT89C51的P1口接8只發光二極管,給出固定的兩種花樣,每隔一定的時間,切換一次花樣,請編程實現。項目二簡易搶答器設計獨立按鍵識別檢測任務一一位數碼管顯示任務二數碼管動態顯示任務三簡易搶答器設計任務四項目目標●掌握LED數碼管結構●掌握數碼管字形編碼●掌握數碼管靜態顯示●掌握數碼管動態顯示項目任務本項目的任務是使用單片機實現搶答器,實現顯示搶答選手編號的數碼管顯示以及有人搶答的同時實現提示音。具體描述:通過按鍵檢測識別技術,檢測到有人搶答后把按鍵值送數碼管顯示出來。任務一獨立按鍵識別檢測任務描述通過按鍵輸入數據或命令,實現簡單的人機對話。本任務要求設計1個獨立按鍵,按下該鍵時,對應的LED亮,再一次按下,LED熄滅,如此重復。知識鏈接按鍵識別按鍵檢測與識別

當單片機檢測到與按鍵相連的IO口被拉低就證明此按鍵被按下。按鍵檢測與識別實際工作中,按鍵的操作并沒有我們想象的“按下松開”那么簡單,操作時存在按鍵抖動的現象。1.按鍵的抖動現象按鍵消抖硬件消抖軟件消抖延時讀鍵法多次讀鍵法在單片機獲得端口為低電平的信息后,不是立即認定按鍵已被按下,而是延時10毫秒或更長的時間后再次檢測該端口,如果仍為低,說明此鍵的確被按下了,這實際上是避開了按鍵按下時的抖動時間。2.按鍵的去抖動

(1)延時讀鍵法如左上圖所示,當電源很穩定,沒有干擾的情況下,這種方法是可靠的。如右上圖所示,當電源不穩定,存在很大干擾時,則有可能存在誤判。在單片機獲得端口為低電平的信息后,在一段時間內如20毫秒,多次檢測按鍵的狀態,只有當每次讀到的狀態都是低電平時才認為有按鍵按下,如下圖所示:

(2)多次讀鍵法用這種方法,不會存在誤判的情況。必須注意,多次檢測持續的時間應該比閉合抖動的時間長。本項目任務中,主要用軟件方法去抖,即檢測出鍵閉合后執行一個延時程序,產生10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給10ms的延時,待后沿抖動消失后才能轉入該鍵的處理程序。3.結論任務實施1.硬件電路。2.程序設計。1.硬件電路2.程序設計#include<reg51.h>//包含頭文件#defineucharunsignedchar//定義uchar為無符號字符型#defineuintunsignedint//定義uint為無符號整型sbitLED=P1^0; //p1.0定義為LEDsbitkey1=P2^7;//按鍵定義voiddelay10ms(void){uchari,k;//變量定義

for(i=20;i>0;i--)for(k=250;k>0;k--);}預定義延時子程序voidmain(void)

{while(1){if(key1==0){delay10ms();

if(key1==0)

{LED=~LED;

while(key1==0);

}}}}進階提高使用AT89C51單片機,設計一個具有8個按鍵的獨立式鍵盤,每個按鍵對應一個發光二極管。

功能要求:無鍵按下時,鍵盤輸出全為“1”,發光二極管全部熄滅;有鍵按下時,其所對應發光二極管點亮。ucharKeyScan(void)//按鍵掃描程序{unsignedcharkeyvalue,key;if(KeyPort!=0xff)//判斷是否有鍵按下

{delay10ms();//去抖動

if(KeyPort!=0xff)//二次判斷是否有鍵按下

{keyvalue=KeyPort;//讀按鍵狀態

while(KeyPort!=0xff);//按鍵松開時,KeyPort=0xff,while語句條件不滿足,開始執行switch語句。switch(keyvalue) { case0xfe:key=0xfe;break;//點亮第一個發光二極管

case0xfd:key=0xfd;break;//點亮第二個發光二極管

case0xfb:key=0xfb;break;//點亮第三個發光二極管

case0xf7:key=0xf7;break;//點亮第四個發光二極管

case0xef:key=0xef;break;//點亮第五個發光二極管

case0xdf:key=0xdf;break;//點亮第六個發光二極管

case0xbf:key=0xbf;break; //點亮第七個發光二極管

case0x7f:key=0x7f;break; //點亮第八個發光二極管

default:key=0xff;break;//其他情況,熄滅發光二極管

}}}知識總結通常的按鍵所用開關為機械彈性開關,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,斷開時也不會一下子斷開,因而在閉合及斷開的瞬間均伴隨有一連串的抖動,引起一次按鍵被誤讀多次。為確保CPU對按鍵的一次閉合僅作一次處理,必須消除按鍵抖動。綜合評價課后作業1.什么是按鍵抖動,去抖動有哪些方法?2.去抖動用軟件延時的方法,軟件延時一般多久?謝謝觀看《單片機技術與應用》課程項目二簡易搶答器設計獨立按鍵識別檢測任務一一位數碼管顯示任務二數碼管動態顯示任務三簡易搶答器設計任務四任務二一位數碼管顯示任務描述通過P2口驅動一位共陰數碼管,如圖所示,顯示出一個數字‘5’。知識鏈接數碼管結構與驅動數碼管結構與驅動

LED數碼管的結構實質是由LED發光二極管組成的。

每一筆劃就相當于一個發光二極管。根據公共腳的接法不同,可分為共陽極數碼管和共陰極數碼管兩種基本類型。1.結構種類

共陰極數碼管是將所有發光二極管的陰極接在一起作為公共端COM,當公共端接低電平時,某一段陽極上的電平為“1”時,該段點亮,電平為“0”時,該段熄滅。

共陽極數碼管是將所有發光二極管的陽極接在一起作為公共端COM,當公共端接高電平時,某一段陰極上的電平為“0”時,該段點亮,電平為“1”時,該段熄滅。例:數碼管顯示數字“2”2.顯示原理亮:a,b,d,e,g滅:c,f,h例:共陰極數碼管顯示數字“2”2.顯示原理abcdefghGND+-共陰極數碼管11011010段碼:01011011(5BH)+5Vabcdefgh+-共陽極數碼管00100101段碼:10100100(A4H)LED數碼顯示器的顯示字符及碼表3.靜態驅動顯示數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。這里只介紹靜態顯示驅動。靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數碼管靜態顯示則需要5×8=40根I/O端口來驅動,要知道一個89C51單片機可用的I/O端口才32個,實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。任務實施1.硬件電路。2.程序設計。1.硬件電路注意:PROTUES中數碼管元件名末尾為

CA(Commonanode)表示共陽,如7SEG-MPX1-CA,

CC(CommonCathode)表示共陰,如7SEG-MPX1-CC。2.程序設計#include<reg51.h>voidmain() //主函數

{while(1){P2=0x6d;//5的共陰極段碼

}}進階提高使用AT89C51單片機,驅動一位數碼管。如下圖所示:P1口驅動共陽數碼管,讓該數碼管輪流顯示‘H’、‘E’、‘L’、‘L’、‘O’。核心代碼提示:voiddisp1(){

}unsignedcharled[]={0x89,0x86,0xc7,0xc7,0xc0};

unsignedchari;for(i=0;i<5;i++){}P1=led[i];delay1s(1000); 知識總結

LED數碼管靜態顯示原理就是在數碼管的公共端加上點亮所需的固定電平,在控制端加上對應段碼,使其穩定地顯示字符或者數字。綜合評價請在“進階提高”的基礎上完成該數碼管由“0”依次顯示到“9”,并讓每個數字顯示的時間間隔為“1秒”的設計。課后作業謝謝觀看《單片機技術與應用》課程項目二簡易搶答器設計獨立按鍵識別檢測任務一一位數碼管顯示任務二數碼管動態顯示任務三簡易搶答器設計任務四任務三數碼管動態顯示任務描述用單片機驅動數碼管動態顯示,在數碼管上同時顯示出“910812”。知識鏈接數碼管動態顯示數碼管動態顯示當需要顯示的位數較多時,為了節省硬件接口,往往采用動態顯示的方式。1.顯示原理動態顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效,點亮數碼管采用動態掃描顯示。

所謂動態掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余輝和人眼視覺暫留作用,使人感覺好像各位數碼管同時都在顯示。

動態顯示的亮度比靜態顯示要差一些,所以在選擇限流電阻時應略小于靜態顯示電路中的電阻。

動態顯示是指一位一位地輪流點亮各位數碼管,這種逐位點亮顯示器的方式稱為位掃描。

通常,各位數碼管的段選線相應并聯在一起,由一個8位的I/O口控制,各位的位選線(公共陰極或公共陽極)由另外的I/O口線控制。以動態方式顯示時,各數碼管分時輪流選通。要使其穩定顯示,必須采用掃描方式,即在某一時刻只選通一位數碼管,并送出相應的段碼,在另一時刻選通另一位數碼管,并送出相應的段碼。

依此規律循環,即可使各位數碼管顯示將要顯示的字符,雖然這些字符是在不同的時刻分別顯示的,但由于人眼存在視覺暫留效應,因此只要每位顯示間隔足夠短就可以給人以同時顯示的感覺。某系統用單片機的I/O口控制兩個共陽極接法的LED顯示器。試編寫應用程序使得在LED顯示器上顯示“HP”兩個字符。2.應用舉例位選:哪一位顯示段選:顯示什么內容段選端位選端#include<reg51.h>//包含頭文件,頭文件包含特殊功能寄存器的定義#defineucharunsignedchar//重新定義為uchar,方便移植#defineuintunsignedint//數據類型unsignedint((無符號整型)重新定義為uint,方便移植

/****ms級延時函數****/voiddelayms(uintt){uinti,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}

/****主函數,動態顯示字母HP兩個字母****/main(){while(1) { P2=0x01;//位選,第一個數碼管顯示 P0=0x89;//段選,H的段碼

delayms(10); P2=0X00;//清消隱 P2=0x02;//位選,第二個數碼管顯示

P0=0x8c;//段選,P的段碼

delayms(10); P2=0x00;//清消隱

}}任務實施1.硬件電路。2.程序設計。1.硬件電路2.程序設計#include<reg51.h>//頭文件#defineuintunsignedint//數據類型unsignedint((無符號整型)重新定義為uint,方便移植/**************延時函數**********************/voiddelayms(unsignedintxms){ uinti,j; for(i=xms;i>0;i--) for(j=120;j>0;j--);}/**************數碼管顯示函數**********************/voiddisp2(){unsignedcharled[]={0x90,0xf9,0Xc0,0x80,0xf9,0xa4};unsignedchari,w;w=0x01; for(i=0;i<6;i++){P2=~w;w<<=1; P1=led[i];delayms(9); P1=0xff;

}}/**************主函數**********************/main() {while(1){disp2();//一直調用數碼管顯示函數

}}進階提高使用移位函數實現6位數碼管的動態顯示。核心代碼提示:voidmain(){inti;P2=0xfe;//開位選,打開第一位數碼管

while(1)//進入大循環,開始動態掃描

{for(i=0;i<8;i++)//依次掃描8位數碼管

{P1=table[i+1];//給段選端P1送字型碼

delay(5000);P2=_crol_(P2,1);//循環右移

}}}知識總結動態顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效,點亮數碼管采用動態掃描顯示。

動態顯示的亮度比靜態顯示要差一些,所以在選擇限流電阻時應略小于靜態顯示電路中的電阻。綜合評價課后作業在本任務電路圖基礎上,在6個數碼管上分別顯示自己學號的后六位數字。謝謝觀看《單片機技術與應用》課程項目二簡易搶答器設計獨立按鍵識別檢測任務一一位數碼管顯示任務二數碼管動態顯示任務三簡易搶答器設計任務四任務四簡易搶答器設計任務描述單片機P3口接8個按鍵,模擬8個選手進行知識搶答,有開始和停止鍵。知識鏈接狀態機按鍵檢測狀態機按鍵檢測

實際上按鍵識別檢測也可以用狀態機來編程實現,使用狀態機最節約系統資源,如:進行按鍵檢測,只需要定時執行按鍵狀態機程序即可。1.狀態機的基本概念無按鍵0有按鍵1等釋放20/0(消抖)1/01/0(干擾)0/1(確認)1/00/0比如說一個按鍵命令解析程序,就可以被看做狀態機:

本來在A狀態下,觸發一個按鍵后切換到了B狀態;再觸發另一個鍵后切換到C狀態,或者返回到A狀態。這就是最簡單的按鍵狀態機例子。實際的按鍵解析程序會比這更復雜些。進一步看,擊鍵動作本身也可以看做一個狀態機。一個細小的擊鍵動作包含了:釋放、抖動、閉合、抖動和重新釋放等狀態。一個鍵按下之后的波形是這樣的(假定低有效):在有鍵按下后,數據線上的信號出現一段時間的抖動,然后為低,當按鍵釋放時,信號抖動一段時間后變高。當然,在數據線為低或者為高的過程中,都有可能出現一些很窄的干擾信號。(1)空閑狀態,即數據線信號為高,這里假定為S1狀態,對應無按鍵狀態;(2)確認真的有鍵按下的狀態,這里假定為S2狀態,對應有按鍵按下狀態;(3)確認真的有鍵釋放的狀態,這里假定為S3狀態,對應按鍵松開狀態。一般情況下,采用的時間序列可以為10-20毫秒之間。在S1狀態,按鍵掃描的狀態始終處于S1,若此時按下按鍵,在下一個掃描時間間隔(這個時間間隔用于消抖)后,單片機檢測到有按鍵按下,進入狀態S2,表示是一次有效的按鍵,然后在以后的每個時間間隔里繼續檢測,如果檢測IO一直是低電平,說明按鍵沒有被松開,那么狀態將一直停留在S2,一旦檢測到IO電平恢復為高電平說明是按鍵已經松開,即狀態S3。2.狀態切換無按鍵0有按鍵1等釋放20/0(消抖)1/01/0(干擾)0/1(確認)1/00/0任務實施1.硬件電路。2.程序設計。1.硬件電路2.程序設計#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint#defineKeyPortP3sbitsmg1=P2^4; sbitsmg2=P2^5; sbitsmg3=P2^6; sbitsmg4=P2^7; sbitkeyks=P1^2; sbitkeytz=P1^1; #definekeystate00 #definekeystate11 #definekeystate22 ucharucKeyStatus=0; unsignedcharkeyvalue=0;uintcount=0;uchartemp1;uchartemp[4]={0x3f,0x3f,0x3f,0x3f};bitflag=0; inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharweixuan[4]={0xef,0xdf,0xbf,0x7f};/**********10ms延時子程序***********/voiddelay10ms(void){uchari,k;for(i=20;i>0;i--)for(k=250;k>0;k--);}/**********ms級延時子程序***********/voiddelayms(uintx) //x=1,約1ms延時函數,數碼管用{uinty,z;for(y=x;y>0;y--)for(z=111;z>0;z--);}/**********狀態機按鍵掃描程序***********/ucharkeyscan() {switch(ucKeyStatus){casekeystate0:ucKeyStatus=keystate1;break;casekeystate1:switch(KeyPort){case0xfe:keyvalue=1;++count;break;//第一個按鍵按下

case0xfd:keyvalue=2;++count;break;//第二個按鍵按下

case0xfb:keyvalue=3;++count;break;//第三個按鍵按下

case0xf7:keyvalue=4;++count;break;//第四個按鍵按下

case0xef:keyvalue=5;++count;break;//第五個按鍵按下

case0xdf:keyvalue=6;++count;break;//第六個按鍵按下

case0xbf:keyvalue=7;++count;break;//第七個按鍵按下

case0x7f:keyvalue=8;++count;break;//第八個按鍵按下

default:keyvalue=0xff;break;//其他情況,無按鍵按下

}/**********功能鍵識別檢查**********/voidKeyScan_1(void){uchari;

if(keytz==0){ delay10ms(); if(keytz==0)

{ while(!keytz);

count=0; for(i=0;i<4;i++){ temp[i]=0x40;} } flag=0;

}}}//開始鍵是否按下if(keyks==0){ delay10ms(); if(keyks==0){ while(!keyks);

count=0;for(i=0;i<4;i++){ temp[i]=0x40;} } flag=1;

}}//數碼管顯示voidsmg(){uchari;for(i=0;i<4;i++){ P0=temp[i];

P2=weixuan[i];

delayms(1);

P2=0xff;

}

}/**********主函數**********/voidmain() {while(1){ smg(); temp1=keyscan(); if((count==1)&&(flag==1)){ temp[0]=0x40; temp[1]=table[0]; temp[2]=table[0]; temp[3]=table[temp1];} KeyScan_1();}}進階提高1.延時時間的計算單片機開發過程中,用到延時程序的地方太多了,怎么比較精確的知道當前使用的延時程序延時時間是多少?2.為搶答器添加提示音一延時時間的計算介紹一個工具軟件:Emu51Form。Emu51Form是一個軟件仿真計時器,具體使用方法為:1.打開

keil\tools.ini

文件,在它的c51欄中加入AGSI9=Emu51Form.DLL

("delay

simulation")

然后存盤。1.延時時間的計算2.把

Emu51Form.dll

文件復制

keil\c51\bin

中。3.新建一個工程,編寫一個延時程序編譯通過后,如圖。4.調時時在peripherals下有Emu51Form選項,如圖:5.選擇

Debug/Start/Stop

Debug

Session

后,彈出如圖所示的對話框。選擇對話框中的Run,即可得到延時程序的延時值。6.編譯測試下面延時程序執行的延時時間,晶振設置為11.0592MHz,該延時程序延時時間為1065us(1.065ms),如圖:#include<reg51.h>//頭文件#defineucharunsignedchar//定義uchar為無符號字符變量。

void

delayms(void)

{

uchark,ms;

ms=1

;

while(ms--)

{

for(k

=

0

;

k

<

120

;

k++)

;

}}2.為搶答器添加提示音核心代碼提示:voidbeeping(){uchari;for(i=0;i<100;i++){ delay1(100); been=~been; } been=1;}知識總結

通過本項目的完成,對數碼管的結構和兩種顯示工作原理有了清楚的認識和掌握。也對單片機控制數碼管顯示的設計流程和設計方法有了清晰的認識和熟練的操作。綜合評價課后作業請自己根據本項目所需內容,為搶答器設計同步提示音,并再次自行獨立完成簡易搶答器的設計,以鞏固所學內容。謝謝觀看《單片機技術與應用》課程項目三抽獎器設計項目任務本項目的任務是制作一個簡易抽獎器,要求按“抽獎鍵”開始抽獎,同時數碼管顯示抽獎號碼,當再次按“抽獎”鍵時,抽獎器停止運行并穩定顯示中獎號碼。項目目標●熟悉單片機中斷的硬件結構●掌握單片機中斷的使用●完成簡易抽獎器的設計認識單片機中斷系統任務一外部中斷的簡單實例應用任務二中斷嵌套實例應用任務四單片機數碼顯示抽獎器任務五外部中斷的復雜實例應用任務三任務一認識單片機中斷系統任務描述帶領同學們開啟單片機的中斷系統之門:知道什么是中斷;中斷的流程;中斷有什么用;中斷如何實現

。知識鏈接一什么是中斷?二中斷有什么用?三中斷如何實現?一什么是中斷CPU在處理某一事件A時,另一事件B請求CPU迅速去處理;CPU暫時中斷當前工作,轉去處理事件B;待CPU處理完事件B后,再回到事件A被中斷的位置繼續處理事件A。這一過程稱為“中斷”。1.中斷的概念執行主程序主程序繼續執行主程序斷點中斷請求中斷響應執行中斷處理程序中斷返回2.中斷的流程引起CPU中斷的根源,稱為中斷源。主程序被打斷的地方,稱為斷點,實現上述中斷功能的部件稱為中斷系統。中斷解決了快速主機與慢速I/O設備的數據傳送,還具有如下優點:(1)分時操作。CPU可以分時為多個I/O設備服務,提高了計算機的利用率;

(2)實時響應。CPU能夠及時處理應用系統的隨機事件,系統的實時性大大增強;

(3)可靠性高。CPU具有處理設備故障及掉電等突發性事件能力,從而使系統可靠性提高。中斷如何實現?二中斷有什么用?三中斷如何實現1.中斷源及中斷系統構成IE0EX0TF0IE1TF1TIESET1EX1ET0RIIP硬件查詢高級中斷請求低級中斷請求中斷入口地址中斷源INT0INT1中斷入口地址中斷源10IEPX0PSPT1PX1PT011111111100000EA1≥1SCON11T0T1RXTXIT0IT100TCON1自然優先級自然優先級外部中斷0定時器T0外部中斷1定時器T1串口中斷1.(P3.2)可由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.2引腳上出現有效的中斷信號時,中斷標志IE0(TCON.1)置1,向CPU申請中斷。2.(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.3引腳上出現有效的中斷信號時,中斷標志IE1(TCON.3)置1,向CPU申請中斷。3.TF0(TCON.5),片內定時/計數器T0溢出中斷請求標志。當定時/計數器T0發生溢出時,置位TF0,并向CPU申請中斷。4.TF1(TCON.7),片內定時/計數器T1溢出中斷請求標志。當定時/計數器T1發生溢出時,置位TF1,并向CPU申請中斷。5.RI(SCON.0)或TI(SCON.1),串行口中斷請求標志。當串行口接收完一幀串行數據時置位RI或當串行口發送完一幀串行數據時置位TI,向CPU申請中斷。

(1)中斷標志

1)中斷標志寄存器TCON

TCON為8位特殊功能寄存器,其結構、位名稱、位地址及其功能如下表所示。

2.中斷標志與中斷控制位編碼TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能

/INT1觸發方式位/INT0觸發方式位IT0=1表示下降沿觸發;IT0=0表示低電平觸發。IT1=1表示下降沿觸發;IT1=0表示低電平觸發。

(1)中斷標志

1)中斷標志寄存器TCON

TCON為8位特殊功能寄存器,其結構、位名稱、位地址及其功能如下表所示。

2.中斷標志與中斷控制位編碼TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能

IE0=1表示外部中斷0的產生中斷;IE0=0表示沒有外部中斷0的產生。IE1=1表示外部中斷1的產生中斷;IE1=0表示沒有外部中斷1的產生。/INT1中斷標志位/INT0中斷標志位

(1)中斷標志

1)中斷標志寄存器TCON

TCON為8位特殊功能寄存器,其結構、位名稱、位地址及其功能如下表所示。

2.中斷標志與中斷控制位編碼TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能

TR0=0,表示單片機復位或T0停止計數;TR0=1,表示啟動T0開始計數。TR1=0,表示單片機復位或T1停止計數;TR1=1,表示啟動T1開始計數。T1啟??刂莆籘0啟??刂莆?/p>

(1)中斷標志

1)中斷標志寄存器TCON

TCON為8位特殊功能寄存器,其結構、位名稱、位地址及其功能如下表所示。

2.中斷標志與中斷控制位編碼TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0位名稱TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能

TF0=0,表示單片機復位或T0無中斷請求發生;TF0=1,表示T0發出中斷請求。TF1=0,表示單片機復位或T1無中斷請求發生;TF1=1,表示T1發出中斷請求。T1中斷標志位T0中斷標志位2)中斷標志寄存器SCON

串行控制寄存器SCON的結構、位名稱、位地址及其功能如下表所示。其中只有TI和RI兩位用來表示串行口中斷標志位。位編碼SCON.7SCON.6SCON.5SCON.4SCON.3SCON.2SCON.1SCON.0位名稱SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H功能

串行接收中斷標志位串行發送中斷標志位

TI:為串行口發送中斷標志位,位地址為99H。在串行口發送完一組數據時,TI由硬件自動置位(TI=1),請求中斷,當CPU響應中斷進入中斷服務程序后,TI狀態不能被硬件自動清除,而必須在中斷程序中由軟件來清除。

RI:為串行口接收中斷標志位,位地址為98H。在串行口接收完一組串行數據時,RI由硬件自動置位(RI=1),請求中斷,當CPU響應中斷進入中斷服務程序后,也必須由軟件來清除RI標志。

(2)中斷控制

1)中斷允許控制寄存器IE中斷的開放和關閉是通過中斷允許寄存器IE各位的狀態進行兩級控制的。

所謂兩級控制是指所有中斷允許的總控制位和各中斷源允許的單獨控制位,每位狀態靠軟件來設定。IE的結構、位名稱、位地址和功能

位編碼IE.7IE.6IE

溫馨提示

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

最新文檔

評論

0/150

提交評論