日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯单片机基础学习00_2

發(fā)布時(shí)間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯单片机基础学习00_2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

三、功能模塊

4、中斷系統(tǒng)

中斷系統(tǒng)
1)中斷的概念:這是大家需要在腦子里有的一個(gè)印象,我們大致可以將中斷描述成CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程我們稱為中斷。
2)中斷源:我們將引起CPU中斷的根源或原因,稱為中斷源。中斷源向CPU提出的處理請(qǐng)求,稱為中斷請(qǐng)求或中斷申請(qǐng)。(傳統(tǒng)的51單片機(jī)有5個(gè)中斷源,而我們使用的IAP15有14個(gè)中斷源)
3)使用中斷我們一定要知道中斷優(yōu)先級(jí)和中斷嵌套這兩個(gè)概念。
①中斷優(yōu)先級(jí):當(dāng)有幾個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),那么就存在CPU先響應(yīng)哪個(gè)中斷請(qǐng)求的問題?為此,CPU要對(duì)各中斷源確定一個(gè)優(yōu)先等級(jí),稱為中斷優(yōu)先級(jí)。中斷優(yōu)先級(jí)高的中斷請(qǐng)求優(yōu)先響應(yīng)。
②中斷嵌套:中斷優(yōu)先級(jí)高的中斷請(qǐng)求可以中斷CPU正在處理的優(yōu)先級(jí)更低的中斷服務(wù)程序,待完成了中斷優(yōu)先權(quán)高的中斷服務(wù)程序之后,再繼續(xù)執(zhí)行被打斷的優(yōu)先級(jí)低的中斷服務(wù)程序,這就是中斷嵌套。

我們使用的IAP15F2K61S2單片機(jī)的中斷系統(tǒng)有14個(gè)中斷源,2個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。由片內(nèi)特殊功能寄存器中的中斷允許寄存器IE、IE2、INT_CLKO控制CPU是否響應(yīng)中斷請(qǐng)求;由中斷優(yōu)先級(jí)寄存器IP、IIP2安排各中斷源的優(yōu)先級(jí);同一優(yōu)先級(jí)內(nèi)2個(gè)以上中斷同時(shí)提出中斷請(qǐng)求時(shí),由內(nèi)部的查詢邏輯確定其響應(yīng)次序。

中斷請(qǐng)求標(biāo)志:AP15F2K61S2單片機(jī)的10個(gè)中斷源的中斷請(qǐng)求標(biāo)志分別寄存在TCON、SCON、PCON、S2CON、ADC_CONTR、SPSTAT、CCON中,其中,外部中斷2(/INT2)、外部中斷3(/INT3)和外部中斷4(/INT4)的中斷請(qǐng)求標(biāo)志位被隱藏起來了,對(duì)用戶是不可見的。當(dāng)相應(yīng)的中斷被響應(yīng)后或(EXn)=0(n=2、3、4),這些中斷請(qǐng)求標(biāo)志位會(huì)自動(dòng)被清0;定時(shí)器T2的中斷請(qǐng)求標(biāo)志位也被隱藏起來了,對(duì)用戶是不可見的,當(dāng)T2的中斷被響應(yīng)后或(ET2)=0,這些中斷請(qǐng)求標(biāo)志位會(huì)自動(dòng)被清0。
IAP15F2K61S2單片機(jī)的中斷請(qǐng)求

中斷允許的控制:計(jì)算機(jī)中斷系統(tǒng)有兩種不同類型的中斷:一類稱為非屏蔽中斷,另一類稱為可屏蔽中斷。IAP15F2K61S2單片機(jī)的14個(gè)中斷源都是可屏蔽中斷,其中斷系統(tǒng)內(nèi)部設(shè)有3個(gè)專用寄存器(IE、IE2、INT_CLKO)用于控制CPU對(duì)各中斷源的開放或屏蔽。

中斷優(yōu)先的控制:IAP15F2K61S2單片機(jī)除外部中斷2(/INT2)、外部中斷3(/INT3)、定時(shí)器T2中斷和外部中斷4(/INT4)為固定最低優(yōu)先級(jí)中斷外,其他中斷都具有2個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。IP、IP2為中斷優(yōu)先級(jí)寄存器,鎖存各中斷源優(yōu)先級(jí)控制位。

中斷源自然優(yōu)先級(jí)從高到低排序
中斷源
外部中斷0
定時(shí)器T0
中斷
外部中斷1
定時(shí)器T1中斷
串行口中斷
A/D轉(zhuǎn)換中斷
LVD中斷
PCA中斷
串行口2中斷
SPI中斷
外部中斷2
外部中斷3
定時(shí)器T2中斷
外部中斷4

IAP15F2K61S2單片機(jī)中斷響應(yīng)
中斷響應(yīng):是CPU對(duì)中斷源中斷請(qǐng)求的響應(yīng),包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱矢量地址)。CPU并非任何時(shí)刻都響應(yīng)中斷請(qǐng)求,而是在中斷響應(yīng)條件滿足之后才會(huì)響應(yīng)。
中斷服務(wù)與中斷返回:中斷服務(wù)與中斷返回就是通過執(zhí)行中斷服務(wù)程序完成的。中斷服務(wù)程序從中斷入口地址開始執(zhí)行,到返回指令“RETI”為止,一般包括四部分內(nèi)容,其結(jié)構(gòu)是:保護(hù)現(xiàn)場(chǎng),中斷服務(wù),恢復(fù)現(xiàn)場(chǎng)、中斷返回。
保護(hù)現(xiàn)場(chǎng):用入棧操作指令將需保護(hù)寄存器的內(nèi)容壓入堆棧。
中斷服務(wù):中斷服務(wù)程序的核心部分,是中斷源中斷請(qǐng)求之所在。
恢復(fù)現(xiàn)場(chǎng):在中斷服務(wù)結(jié)束之后,中斷返回之前,用出棧操作指令將保護(hù)現(xiàn)場(chǎng)中壓入堆棧的內(nèi)容彈回到相應(yīng)的寄存器中,注意彈出順序必須與壓入順序相反。
中斷返回:中斷返回是指中斷服務(wù)完成后,計(jì)算機(jī)返回原來斷開的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來的程序。中斷返回由中斷返回指令RETI來實(shí)現(xiàn)。

5、定時(shí)器/計(jì)數(shù)器(Timer0/1)

定時(shí)器(Timer0/1)
首先我們需要知道定時(shí)器Timer需要使用的寄存器有哪些:

我們先來簡(jiǎn)單的說一下TMOD、 TCON兩個(gè)寄存器的功能和區(qū)別:
1)TMOD:就是運(yùn)行模式配置寄存器,也就是配置定時(shí)器是工作在定時(shí)器狀態(tài)還是計(jì)數(shù)器狀態(tài),以及定時(shí)器的工作模式是13位定時(shí)器,16位定時(shí)器,雙8位定時(shí)器自動(dòng)重裝,還是雙8位定時(shí)器等等。
2)TCON:就是定時(shí)/計(jì)數(shù)器的控制寄存器,包括控制定時(shí)器的的啟動(dòng)與停止,是否允許外部的中斷請(qǐng)求判斷定時(shí)器是否已經(jīng)溢出等等。
簡(jiǎn)而言之,一句話2個(gè)寄存器 一個(gè)是配置模式功能 一個(gè)是控制功能,具體的運(yùn)用理解還需要大家多看多用。
定時(shí)器/計(jì)數(shù)器0/1控制寄存器TCON
TCON為定時(shí)器/計(jì)數(shù)器T0、T1的控制寄存器,同時(shí)也鎖存T0、T1溢出中斷源和外部請(qǐng)求中斷源等,TCON格式如下:
TCON為定時(shí)器/計(jì)數(shù)器中斷控制寄存器(可位尋址)

各寄存器功能

定時(shí)器/計(jì)數(shù)器0/1工作模式寄存器TMOD
定時(shí)和計(jì)數(shù)功能由特殊功能寄存器TMOD的控制位C/T進(jìn)行選擇,TMOD寄存器的各位信息。

可以看出,2個(gè)定時(shí)/計(jì)數(shù)器有4鐘操作模式,通過TMOD的M1和M0選擇。2個(gè)定時(shí)/計(jì)數(shù)器模式0、1和2都相同,模式3不同,各模式下的功能請(qǐng)參見datasheet P593。
定時(shí)器0/1的中斷控制寄存器:IE和IP
IE:中斷允許寄存器(可位尋址)

EA:CPU的總中斷允許控制位,EA = 1,CPU開放中斷,EA = 0,CPU屏蔽所有的中斷申請(qǐng)。
ET1:定時(shí)/計(jì)數(shù)器T1的溢出中斷允許位,ET1 = 1,允許T1中斷,ET1 = 0禁止T1中斷。
ET0:同上。
IP:中斷優(yōu)先級(jí)控制寄存器(可位尋址)

PT1: 定時(shí)器1中斷優(yōu)先級(jí)控制位。
當(dāng)PT1 = 0時(shí),定時(shí)器1中斷為最低優(yōu)先級(jí)中斷(優(yōu)先級(jí)0)
當(dāng)PT1 = 1時(shí),定時(shí)器1中斷為最高優(yōu)先級(jí)中斷(優(yōu)先級(jí)1)
PT0: 定時(shí)器1中斷優(yōu)先級(jí)控制位。
當(dāng)PT0 = 0時(shí),定時(shí)器0中斷為最低優(yōu)先級(jí)中斷(優(yōu)先級(jí)0)
當(dāng)PT0 = 1時(shí),定時(shí)器0中斷為最高優(yōu)先級(jí)中斷(優(yōu)先級(jí)1)
注意事項(xiàng)

輔助寄存器AUXR
普通8051單片機(jī)是12T的機(jī)器周期,STC15的是1T的這個(gè)輔助寄存器的功能就是用來選擇STC15工作在1T還是12T的模式下。

定時(shí)器/計(jì)數(shù)器0工作模式
通過對(duì)寄存器TMOD中的M1(TMOD.1)、(TMOD.0)的設(shè)置,定時(shí)器/計(jì)數(shù)器0有4種不同的工作模式。
模式0(16位自動(dòng)重裝載模式)(只介紹該模式,其余三種模式見datasheet)

定時(shí)器/計(jì)數(shù)器0工作模式0(16位自動(dòng)重裝載模式)
M1和M0:方式選擇控制位
C/ T:功能選擇位。
1:計(jì)數(shù)器功能(對(duì)T0或T1引腳的負(fù)跳變進(jìn)行計(jì)數(shù))。
0:定時(shí)器功能(對(duì)時(shí)鐘周期進(jìn)行計(jì)數(shù))。
GATE:門控位。GATE用于選通控制。
1:INTX為高電平且TRX置位時(shí),啟動(dòng)定時(shí)器工作。
0:每當(dāng)TRX置位時(shí),就啟動(dòng)定時(shí)器工作。
注意:TMOD寄存器不能進(jìn)行位尋址,設(shè)置時(shí)只 能對(duì)整個(gè)寄存器賦值。
IAP15F2K61S2的定時(shí)器有兩種計(jì)數(shù)速率:一種是12T模式,每12個(gè)時(shí)鐘加1;另一種是1T模式,每個(gè)時(shí)鐘加1。
T0和T1的速率分別由特殊功能寄存器AUXR中的T0x12和T1x12決定。
T0x12=0,T0工作在12T模式;
T0x12=1,T0工作在1T模式。
T1x12=0,T1工作在12T模式;
T1x12=1,T1則工作在1T模式。
定時(shí)器0和定時(shí)器1分別有2個(gè)隱藏的寄存器RL_THx和RL_TLx。RL_THx與THx共有同一個(gè)地址,RL_TLx與TLx共有同一個(gè)地址。當(dāng)TRx=0即定時(shí)器/計(jì)數(shù)器被禁止工作時(shí),對(duì)TLx、THx寫入的內(nèi)容會(huì)同時(shí)寫入RL_TLx、RL_THx。 當(dāng)TRx=1即定時(shí)器/計(jì)數(shù)器工作時(shí),對(duì)TLx 、THx寫入的內(nèi)容不會(huì)寫入RL_TLx 、RL_THx。
當(dāng)定時(shí)器工作在模式0時(shí),[TLx,THx]的溢出 不僅置位TFx,而且會(huì)自動(dòng)將[RL_TLx,RL_THx] 的內(nèi)容重新裝入[TLx,THx]。
當(dāng)T0CLKO=1時(shí),T1/P3.5引腳配置為定時(shí)器0的時(shí)鐘輸出CLKOUT0。
當(dāng)T1CLKO=1時(shí),T0/P3.4引腳配置為定時(shí)器1的時(shí)鐘輸出CLKOUT1。
詳細(xì)介紹

定時(shí)器的最大定時(shí)能力
當(dāng)工作于定時(shí)狀態(tài)時(shí),定時(shí)/計(jì)數(shù)器是對(duì)時(shí)鐘周期進(jìn)行計(jì)數(shù),若對(duì)時(shí)鐘進(jìn)行12分頻,則對(duì)每12個(gè)時(shí)鐘周期計(jì)數(shù)一次。
當(dāng)晶振頻率為6MHz,采用12分頻時(shí),計(jì)數(shù)的單位時(shí)間為:
單位時(shí)間為:
定時(shí)時(shí)間為: TC=XTu。
其中,Tu為單位時(shí)間,TC為定時(shí)時(shí)間,X為所需計(jì)數(shù)次數(shù)。
STC15F2K60S2單片機(jī)的定時(shí)/計(jì)數(shù)器是加1計(jì)數(shù)器。因此,不能直接將實(shí)際的計(jì)數(shù)值作為計(jì)數(shù)初值送入計(jì)數(shù)寄存器THX、TLX中,而必須將實(shí)際計(jì)數(shù)值以28、216為模求補(bǔ),以補(bǔ)碼作為計(jì)數(shù)初值設(shè)置THX和TLX。
即應(yīng)裝入計(jì)數(shù)/定時(shí)器的初值為:,其中,n=8或16。
例如:已知Tu=2μs,要求定時(shí)TC=1ms,則
對(duì)方式0和方式1,時(shí)間常數(shù)為:216-500=65036=FE0CH (THX裝入FEH,TLX裝入0CH)。
設(shè)系統(tǒng)時(shí)鐘頻率為6MHz,12分頻時(shí),
8位定時(shí)器的最大定時(shí)能力為:T=(28 -0)×2μs=512μs
16位定時(shí)器的最大定時(shí)能力為:T=(216 -0)×2μs=131072μs=131.072ms
最后補(bǔ)充一下,初學(xué)階段對(duì)定時(shí)器的使用可以直接使用我第一章中所講的方法直接自動(dòng)生成所需定時(shí)器,用以程序使用,但是還是希望大家理解最重要。
以上是定時(shí)器的原理,接下來我們簡(jiǎn)單運(yùn)用定時(shí)器來寫個(gè)控制LED量滅的程序:

#include “stc15f2k60s2.h”#define LED P0unsigned char t;void Timer0Init(void);void main() {P2 = ((P2&0x1f)|0xA0); //不再重復(fù)解釋,前兩章已解釋多次P0 = 0X00;P2 = ((P2&0x1f)|0x80);P0 = 0Xff;//先關(guān)閉LEDTimer0Init();EA = 1; //打開定時(shí)器0ET0 = 1;while(1){if(t == 200){LED = ~LED;t = 0;//初始化標(biāo)志位}} }void Timer0Init(void)//5毫秒@11.0592MHz {AUXR |= 0x80;//定時(shí)器時(shí)鐘1T模式TMOD &= 0xF0;//設(shè)置定時(shí)器模式TL0 = 0x00;//設(shè)置定時(shí)初值TH0 = 0x28;//設(shè)置定時(shí)初值TF0 = 0;//清除TF0標(biāo)志TR0 = 1;//定時(shí)器0開始計(jì)時(shí) }void Timer0() interrupt 1 //定時(shí)器0的開啟中斷1 {t++; }

6、靜態(tài)數(shù)碼管和動(dòng)態(tài)數(shù)碼管

共陰/共陽(yáng)數(shù)碼管
使用的是兩個(gè)4位八段共陽(yáng)數(shù)碼管。

八段數(shù)碼管:八個(gè)發(fā)光二極管組成的如上圖的結(jié)構(gòu)形態(tài),
共陰數(shù)碼管:八個(gè)LED陰極相連組成公共端接GND,
共陽(yáng)數(shù)碼管:八個(gè)LED陽(yáng)極相連組成公共端接VCC。
4位八段數(shù)碼驅(qū)動(dòng)原理:其中八個(gè)管腳作為(A,B,C,D,E,F,G,DP)的驅(qū)動(dòng)端口,選擇哪一段數(shù)碼管亮或不亮,我們稱之為數(shù)碼管段選,還有4個(gè)管腳作為選擇四位數(shù)碼管中的哪一位亮或不亮的驅(qū)動(dòng)端口,也就是四個(gè)公共端,我們稱之為數(shù)碼管位選。
驅(qū)動(dòng)原理

圖中a1、b1……dp1就是數(shù)碼管的段選端口,com1、com2……com8就是數(shù)碼管的位選端口,我們可以看到,藍(lán)橋杯開發(fā)板的數(shù)碼管段選和位選都是通過單片機(jī)的P0寄存器來驅(qū)動(dòng)的,但是因?yàn)镻0不能同一時(shí)刻既做段選又做位選,所以這里就要在一個(gè)很短的時(shí)間內(nèi)在段選和位選之間切換選擇操作。
靜態(tài)數(shù)碼管數(shù)碼管所有公共端接GND或VCC,在該開發(fā)板上不是接GND和VCC而是接在兩個(gè)573三態(tài)鎖存器上,全亮全滅不單獨(dú)選擇端口操作。優(yōu)點(diǎn):不閃爍,亮度高。缺點(diǎn):占用端口多。
示例程序:

/******************//* 數(shù)碼管程序示例 *//******************/ #include “stc15f2k60s2.h” #define uchar unsigned char #define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; /*這里如果不加code,就會(huì)占用寄存器,允許讀取和修改寄存器的值, 但是寄存器的數(shù)量有限,故我們?cè)谶@里加上code,將其定義為代碼的 類型,只能讀取不能修改*/ uchar t = 0,i;void Timer0Init(void);void main() {P2 = ((P2&0x1f)|0xa0);//不再重復(fù)解釋,前兩章已解釋多次P0 = 0x00;P2 = ((P2&0x1f)|0xc0);//打開位選選573P0 = 0xff;//選擇8位數(shù)碼管P2 = ((P2&0x1f)|0xff);//打開段選573Timer0Init();EA=1;ET0=1;while(1){if(t == 100){t = 0;P0 = tab[i];i++;if(i == 12)i = 0;}} }void Timer0Init(void)//5毫秒@11.0592MHz {AUXR |= 0x80;//定時(shí)器時(shí)鐘1T模式TMOD &= 0xF0;//設(shè)置定時(shí)器模式TL0 = 0x00;//設(shè)置定時(shí)初值TH0 = 0x28;//設(shè)置定時(shí)初值TF0 = 0;//清除TF0標(biāo)志TR0 = 1;//定時(shí)器0開始計(jì)時(shí) }void Timer0() interrupt 1 {t++; }

動(dòng)態(tài)數(shù)碼管
數(shù)碼管公共端依次掃描接通。優(yōu)點(diǎn):占用端口少。缺點(diǎn):攝像,拍照時(shí)閃爍,在同樣電壓下與靜態(tài)相比,亮度較低。示例程序:

#include "stc15f2k60s2.h" #include "intrins.h"#define uchar unsigned char #define uint unsigned intuchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x7f}; /*這里如果不加code,就會(huì)占用寄存器,允許讀取和修改寄存器的值, 但是寄存器的數(shù)量有限,故我們?cè)谶@里加上code,將其定義為代碼的 類型,只能讀取不能修改*/ uchar t = 0; uchar c5, c6, c7, c8; uint num = 2330;void Timer0Init(void); void display(uchar c5, uchar c6, uchar c7, uchar c8); void Delay1ms();void main() {P2 = ((P2&0x1f)|0xa0);//不再重復(fù)解釋,前兩章已解釋多次P0 = 0x00;Timer0Init();EA=1;ET0=1;while(1){if(t == 200){t = 0;num--;c5 = (num / 1000) % 10;c6 = (num / 100) % 10;c7 = (num /10) % 10;c8 = num % 10;}display(c5, c6, c7, c8);} }void display(uchar c5, uchar c6, uchar c7, uchar c8) {P2 = ((P2&0x1f)|0xc0);P0 = 0x80;P2 = ((P2&0x1f)|0xff);P0 = tab[c8];Delay1ms();P2 = ((P2&0x1f)|0xc0);P0 = 0x40;P2 = ((P2&0x1f)|0xff);P0 = tab[c7];Delay1ms();P2 = ((P2&0x1f)|0xc0);P0 = 0x20;P2 = ((P2&0x1f)|0xff);P0 = tab[c5];Delay1ms();P2 = ((P2&0x1f)|0xc0);P0 = 0x10;P2 = ((P2&0x1f)|0xff);P0 = tab[c6];Delay1ms(); }

定時(shí)器中斷實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘程序

使用單片機(jī)定時(shí)器制作一個(gè)以00-00-00模式顯示,可以通過四個(gè)獨(dú)立按鍵進(jìn)行時(shí)間修改的24小時(shí)制時(shí)鐘。
定時(shí)器、中斷、數(shù)碼管、按鍵等功能

#include "stc15f2k60s2.h" #define uchar unsigned char #define uint unsigned sbit key1=P3^0;//定義端口參數(shù) sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; /*key1用于小時(shí) +1key2用于小時(shí) -1key3用于分鐘 +1key4用于分鐘 -1 */int uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xbf,0x7f}; uchar strtab[8];//定義緩沖區(qū)域 uchar hour = 10, minute = 25, second = 12; //初始化起始時(shí)間10-25-12void display(void); void delayms(int ms); void Timer0Init(void); void Timer1Init(void);void main() {P2 = ((P2&0x1f)|0xa0);P0 = 0x00;Timer0Init();Timer1Init();ET0 = 1;//開啟定時(shí)器0ET1 = 1;//同上EA = 1;//定時(shí)器使能display();while(1){if (!key1){delayms(5);//按鍵消抖if (!key1){hour++;if (hour == 24)hour = 0;display();while(!key1);//松手檢測(cè)}}//其余三個(gè)按鍵功能請(qǐng)自行編寫,如遇問題請(qǐng)下載參考源程序} }void display(void) {strtab[0] = tab[hour / 10];strtab[1] = tab[hour % 10];strtab[2] = tab[10];strtab[3] = tab[minute % 10];strtab[4] = tab[minute % 10];strtab[5] = tab[10];strtab[6] = tab[second / 10];strtab[7] = tab[second % 10]; }void delayms(int ms) {int i,j;for(i=ms;i>0;i--)for(j=845;j>0;j--); }void Timer0Init(void) //5毫秒@11.0592MHz //內(nèi)容請(qǐng)自行計(jì)算void Timer1Init(void) //1毫秒@11.0592MHz //內(nèi)容請(qǐng)自行計(jì)算void Timer1_int() interrupt 3 using 0 {static uchar num;TH1 = 0xcd;TL1 = 0xd4;switch(num)//分別調(diào)用緩沖區(qū)的值進(jìn)行掃描{case 0: P2 = ((P2&0x1f)|0xc0); P0 = 0x01;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 1: P2 = ((P2&0x1f)|0xc0); P0 = 0x02;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 2: P2 = ((P2&0x1f)|0xc0); P0 = 0x04;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 3: P2 = ((P2&0x1f)|0xc0); P0 = 0x08;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 4: P2 = ((P2&0x1f)|0xc0); P0 = 0x10;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 5: P2 = ((P2&0x1f)|0xc0); P0 = 0x20;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 6: P2 = ((P2&0x1f)|0xc0); P0 = 0x40;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;case 7: P2 = ((P2&0x1f)|0xc0); P0 = 0x80;P2 = ((P2&0x1f)|0xff); P0 = strtab[num];break;default:break;}num++;if (num == 8)num = 0; } void Timer0_int() interrupt 1 using 1 {static uchar count;//定義內(nèi)部靜態(tài)變量TL0 = 0x00; //初始化初值TH0 = 0x28;<count++;switch (count);{case 0:case 40:case 80:case 120:case 160:display();break;}if (count == 200){count = 0;second++;//加一秒if (second == 60){second = 0;minute++;//加一分if (minute == 60){minute = 0;hour++;//加一小時(shí)if (hour == 24)hour = 0;}}} }

習(xí)題:使用單片機(jī)定時(shí)器制作一個(gè)以00-00-00為初始可以通過四個(gè)獨(dú)立按鍵進(jìn)行時(shí)間修改的24小時(shí)制時(shí)鐘。

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯单片机基础学习00_2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。