




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目4電子鐘的實現——項目任務介紹和硬件設計項目介紹項目:電子鐘的實現
任務1:電子秒表的實現
任務2:簡易電子鐘
任務3:帶鬧鐘、調時功能
的電子鐘電子鐘項目:綜合應用了顯示、按鍵、蜂鳴器、定時器、中斷等模塊。項目介紹單片機內部定時器/計數器模塊的使用數碼管的動態顯示綜合性程序的編寫和調試任務1電子秒表的實現任務2簡易電子鐘任務3帶鬧鐘、調時功能的電子鐘項目整體設計單片機模塊數碼管模塊按鍵模塊蜂鳴器模塊任務4.1電子秒表的實現電子秒表的實現任務介紹
秒表的走時范圍是0-59秒;
在兩位數碼管上顯示走時效果;
P3.2引腳上的按鍵控制秒表狀態:程序運行時,秒表開始走時;按鍵按下一次,秒表停止走時;按鍵按下兩次,秒表清零。按鍵按下三次,恢復走時。①②③電子秒表整體設計單片機模塊2位數碼管模塊按鍵模塊任務硬件設計圖電子秒表硬件電路圖序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED數碼管7seg-com-anode
23排阻RX847024按鍵button1任務4.1
電子秒表的實現——定時器/計數器模塊的使用1任務軟件設計任務3-1:DS18B20電路設計任務3-1:DS18B20電路設計任務介紹秒表的走時范圍是0-59秒;在兩位數碼管上顯示走時效果;P3.2引腳上的按鍵控制秒表狀態:程序運行時,秒表開始走時;按鍵按下一次,秒表停止走時;按鍵按下兩次,秒表清零。1s鐘精確定時秒的走時數碼管的顯示按鍵的識別和處理任務軟件設計voidmain()
//主函數{while(1)//無限循環
{ LED=0;
//點亮LED
delay_ms(1000); //軟件延時 LED=1;
//熄滅LED
delay_ms(10000); //軟件延時
}}實現電子秒表首先要解決的問題:實現1s的精確定時。voiddelay_ms(unsignedintms){unsignedinti; do{ i=MAIN_Fosc/13000; while(--i) ;//14Tperloop}while(--ms);}1.定時過程中不能做其他事情2.定時精確度不高電子鐘的定時100%軟件定時特點:無需硬件電路,但定時期間CPU被占用,增加了CPU的開銷,因此定時時間不宜過長,而且定時期間如果發生中斷,定時時間就會出現誤差。硬件定時特點:不占CPU資源,但定時時間的調節不夠靈活方便且增加了硬件成本。可編程定時器定時特點:不影響CPU的效率,且定時時間精確1秒鐘的精確定時單片機應用系統中常見的定時方式123定時器實現1ms定時STC15系列單片機內部有5個16位的可編程定時器/計數器T0、T1、T2、T3和T4示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。使用單片機的定時器/計數器模塊實現定時功能定時計數定時器/計數器T0模塊及其內部結構
單片機內部的定時器/計數器模塊通過設置工作方式寄存器TMOD、控制寄存器TCON和輔助寄存器AUXR來控制定時器的工作。定時器T1TH1(8DH)TL1(8BH)高8位低8位計數器外部輸入端T1(P3.5)定時器T0TH0(8CH)TL0(8AH)高8位低8位計數器外部輸入端T0(P3.4)CPUGATEC/TM1M0GATEC/TM1M0TMOD(工作方式寄存器)定時器內部時鐘定時器內部時鐘TF1TR1TF0TR0TCON(控制寄存器)外部中斷相關位T0x12T1x12AUXR(輔助寄存器)工作原理K1K2T0加1計數器可選擇16或8位溢出信號TF0=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值定時器/計數器T0模塊工作流程初始值設置設定分頻系數定時功能設置工作方式設置啟動工作設定分頻系數工作方式設置定時器/計數器T0模塊設定流程工作原理編程控制啟動控制功能選擇(TMOD)TR0(TCON)GATE(TMOD)M1M0(TMOD)TF0(TCON)初始值設置設定分頻系數定時功能設置工作方式設置啟動工作K1K2T0加1計數器可選擇13、16或8位溢出信號TF0=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制計數初值THx=初值高8位TLx=初值低8位設定分頻系數T0x12(AUXR)定時器/計數器模塊相關寄存器的設置T1門控位:GATE=0:使用TR1啟動工作GATE=1:由TR1和INT1共同啟動工作TMOD(89h)工作方式寄存器GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1功能選擇位:=0:定時功能=1:計數功能T1工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2T0工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0功能選擇位:=0:定時功能=1:計數功能T0門控位:GATE=0:使用TR0啟動工作GATE=0:由TR0和INT0共同啟動工作T0T1字節尋址初始值設置設定分頻系數定時功能設置工作方式設置啟動工作啟動工作工作方式設置定時功能設置定時器/計數器模塊相關寄存器的設置工作方式寄存器TMOD(89h)GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2T0工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3M1M0工作方式功能描述00方式0自動重裝初始值的16位計數器(推薦)01方式116位計數器10方式2自動重裝初值的8位計數器11方式3T0:分成兩個8位的計數器,T1:停止計數用定時器T0,定時功能,工作方式0:TMOD=00000000;TMOD=0X00;初始值設置設定分頻系數定時功能設置工作方式設置啟動工作啟動工作工作方式設置定時功能設置輔助寄存器AUXRT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1ST2D0D7D6D5D4D3D2D1T0定時功能下的分頻系數設定:T0x12=0:12分頻T0x12=1:不分頻T1定時功能下分頻系數設定T1x12=0:12分頻T1x12=1:不分頻定時器/計數器模塊相關寄存器的設置使用定時器T0定時,不分頻:AUXR=AUXR|0X80;字節尋址初始值設置設定分頻系數定時功能設置工作方式設置啟動工作設定分頻系數定時器/計數器模塊相關寄存器的設置T1溢出中斷請求標志控制寄存TCON(88h)TF1TR1TF0TR0------------D0D7D6D5D4D3D2D1T1啟動位,TR1=1/0,啟動/停止外部中斷控制位與定時/計數器無關T0溢出中斷請求標志T0啟動位,TR0=1/0,啟動/停止啟動定時器T0開始工作TR0=1;位尋址初始值設置設定分頻系數定時功能設置工作方式設置啟動工作啟動工作定時器/計數器模塊相關寄存器的設置工作原理K1K2TX加1計數器可選擇16或8位溢出信號TFx=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數初始值設置設定分頻系數定時功能設置工作方式設置啟動工作初始值設置定時器/計數器模塊相關寄存器的設置16位加1計數器THxTLx00000000高8位TH低8位TL1~216
1~6553600000000111111111111111100TFx00000000000000001初始值設置設定分頻系數定時功能設置工作方式設置啟動工作初始值設置定時器/計數器(T0/T1)模塊及其內部結構T初值0M+1計數啟動計數計數溢出(TFx=1)完成一次計數定時時間=(65536-計數初始值)×系統時鐘周期×定時器初始值不分頻時定時1ms時定時器T0的初始值:用定時器T0方式0實現1ms定時。TH0=(65536-MAIN_Fosc/1000)/256;TL0=(65536-MAIN_Fosc/1000)%256;初始值設置設定分頻系數定時功能設置工作方式設置啟動工作注:MAIN_Fosc是系統時鐘頻率不分頻時,定時范圍是1/12us——5461us12分頻時,定時范圍是1us——65536us#include<stc15.h>#defineMAIN_Fosc11059200//定義系統時鐘頻率sbitLED=P1^0;voidmain(){ TMOD=0X00;//設置定時器工作方式,定時器T0工作在方式0,定時功能
AUXR=AUXR|0X80;//對震蕩信號計數實現定時,不分頻
TH0=(65536-MAIN_Fosc/1000)/256;//設置1ms定時初始值 TL0=(65536-MAIN_Fosc/1000)%256;//設置1ms定時初始值 TR0=1;//啟動定時器開始工作}軟件設計——定時器的初始化設定AUXR寄存器(設置分頻系數)設定TH0/1、TL0/1(設定定時/計數初始值)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定TCON寄存器(啟動定時器開始工作)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定AUXR寄存器(設置分頻系數)設定TH0/1、TL0/1(設定定時/計數初始值)設定TCON寄存器(啟動定時器開始工作)示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。任務4.1
電子秒表的實現——定時器/計數器模塊的應用2#include<stc15.h>#defineMAIN_Fosc11059200//定義系統時鐘頻率sbitLED=P1^0;voidmain(){ TMOD=0X00;//設置定時器工作方式,定時器T0工作在方式0,定時功能
AUXR=AUXR|0X80;//對震蕩信號計數實現定時,不分頻
TH0=(65536-MAIN_Fosc/1000)/256;//設置1ms定時初始值 TL0=(65536-MAIN_Fosc/1000)%256;//設置1ms定時初始值 TR0=1;//啟動定時器開始工作}軟件設計——定時器的初始化設定AUXR寄存器(設置分頻系數)設定TH0/1、TL0/1(設定定時/計數初始值)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定TCON寄存器(啟動定時器開始工作)示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。定時器/計數器T0模塊工作流程工作原理K1K2TXTH0溢出信號TF0=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數TL0RL_TH0RL_TL0方式0可自動重裝初始值的16位定時器/計數器查詢方式中斷方式軟件設計——計數溢出處理#include<stc15.h>#defineMAIN_Fosc11059200//定義系統時鐘頻率sbit LED=P1^0;voidmain(){ TMOD=0X00;//設置定時器工作方式,定時器T0工作在方式0,定時功能
TH0=(65536-MAIN_Fosc/1000)/256;//設置1ms的定時初始值 TL0=(65536-MAIN_Fosc/1000)%256;
AUXR=AUXR|0X80;//設置定時器不分頻
TR0=1;//啟動定時器開始工作 while(1) { while(!TF0);//
查詢1ms時間是否到
TF0=0;//對TF0清零,為下一次定時做準備
LED=~LED;//led燈的狀態改變 }}查詢方式定時器初始化溢出標志位清零LED狀態取反定時時間到?YN示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。軟件設計——計數溢出處理#include<stc15.h>#defineMAIN_Fosc11059200//定義系統時鐘頻率voiddelay_1ms();//對1ms延時子函數進行聲明sbit LED=P1^0;voidmain(){ TMOD=0X00;//設置定時器T0工作在方式0,定時功能
AUXR=AUXR|0X80;//設置定時器不分頻 while(1) {
delay_1ms();//調用1ms延時子函數
LED=!LED;//led燈的狀態改變
}}查詢方式定時器初始化溢出標志位清零LED狀態取反定時時間到?YN示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。程序優化軟件設計——計數溢出處理voiddelay_1ms(){
TH0=(65536-MAIN_Fosc/1000)/256;//設置1ms的定時初始值 TL0=(65536-MAIN_Fosc/1000)%256;
TR0=1;//啟動定時器開始工作
while(!TF0);//查詢1ms時間是否到
TF0=0;//對TF0清零,為下一次定時做準備}查詢方式程序優化軟件設計——計數溢出處理中斷方式軟件設計——計數溢出處理#include<stc15.h>#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1;//允許定時器T0中斷發生 EA=1;//允許總中斷發生 TR0=1; while(1);//原地踏步指令}delay_1ms()interrupt1using1//定時器0中斷服務函數{ LED=!LED;//led燈的狀態改變}中斷方式定時器、中斷初始化溢出標志位清零LED狀態取反定時時間到?YN示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1ms定時,每1ms時間,P1.0引腳上LED的狀態取反一次。中斷源名稱中斷號外部中斷00定時器/計數器0中斷1外部中斷12定時器/計數器1中斷3表3.3中斷標號v
實踐中認真學習其中的工作原理,養成認真投入,追求極致、精益求精的工匠精神。堅持自信自愛,堅韌樂觀,能積極進行情緒的自我調節,克服自己的畏難情緒,我們可以很好得掌握定時器模塊的使用。
電子鐘的定時T0、T1的工作方式
單片機芯片STC15W4K32S4,T0有4種工作方式(方式0、方式1、方式2、方式3),T1有3種工作方式(方式0、方式1、方式2)。工作原理K1K2TXTH0溢出信號TF0=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數TL0RL_TH0RL_TL0方式0可自動重裝初始值的16位定時器/計數器T0、T1的工作方式工作原理K1K2TXTH0溢出信號TFx=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數TL0方式1
單片機芯片STC15W4K61S4,T0有4種工作方式(方式0、方式1、方式2、方式3),T1有3種工作方式(方式0、方式1、方式2)不可自動重裝初始值的16位定時器/計數器T0、T1的工作方式工作原理K1K2TXTH0溢出信號TFx=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數TL0方式2
單片機芯片STC15W4K61S4,T0有4種工作方式(方式0、方式1、方式2、方式3),T1有3種工作方式(方式0、方式1、方式2)可自動重裝初始值的8位定時器/計數器T0、T1的工作方式工作原理K1K2TXTH0溢出信號TFx=1中斷請求CPU內部機器周期脈沖(定時)外部引腳輸入脈沖(計數)計數脈沖啟動控制功能選擇計數初值設定分頻系數TL0RL_TH0RL_TL0不可屏蔽中斷的16位自動重裝載模式方式3
單片機芯片STC15W4K61S4,T0有4種工作方式(方式0、方式1、方式2、方式3),T1有3種工作方式(方式0、方式1、方式2)定時功能的使用——示例講解示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1s鐘定時,每1s鐘P1.0引腳上LED的狀態取反一次。查詢方式中斷方式1ms定時1000次?不分頻時,定時范圍是1/12us——5461usYN示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1s鐘定時,每1s鐘P1.0引腳上LED的狀態取反一次。#include<stc15.h>voiddelay_1ms(unsignedintn);//對延時子函數進行聲明#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; AUXR=AUXR|0X80; while(1) { delay_1ms(1000); LED=!LED;//led燈的狀態改變 }}定時功能的使用——示例講解查詢方式示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1s鐘定時,每1s鐘P1.0引腳上LED的狀態取反一次。voiddelay_1ms(unsignedintn)//延時子函數的定義{ unsignedinti; for(i=0;i<n;i++) { TH0=(65536-MAIN_Fosc*/1000)/256; TL0=(65536-MAIN_Fosc*/1000)%256; TR0=1; while(!TF0);// 查詢指令 TF0=0;//對TF0清零,為下一次定時做準備 }}定時功能的使用——示例講解查詢方式示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1s鐘定時,每1s鐘P1.0引腳上LED的狀態取反一次。#include<stc15.h>#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1;//允許定時器中斷0發生 EA=1;//允許總中斷發生 TR0=1; while(1);//原地踏步指令}中斷方式定時功能的使用——示例講解示例:設時鐘頻率fosc=11.0592MHz,用定時器T0方式0實現1s鐘定時,每1s鐘P1.0引腳上LED的狀態取反一次。delay_1s()interrupt1using1//定時器0中斷服務函數{ unsignedinti;//定義變量i,用于統計進入中斷的次數 n++;//每進入一次中斷,變量n加1。 if(n==1000) { LED=!LED;//led燈的狀態改變 n=0;//變量n清零,為下一次1s定時做準備 }}中斷方式定時功能的使用——示例講解
我們在實現復雜任務的時候可以考慮獨立分解任務,遵循從易到難的原則,逐步實現任務功能。不走捷徑,一步一個腳印,腳踏實地,我們就一直走在通往成功的路上。
電子鐘的定時任務4.1電子秒表的實現——計數功能的應用計數功能的使用示例:使用定時器/計數器T1的計數功能,實現每計三個數,P1.0引腳連接LED燈的狀態取反一次。定時器T1TH1(8DH)TL1(8BH)高8位低8位計數器外部輸入端T1(P3.5)定時器T0TH0(8CH)TL0(8AH)高8位低8位計數器外部輸入端T0(P3.4)CPUGATEC/TM1M0GATEC/TM1M0TMOD(工作方式寄存器)定時器內部時鐘定時器內部時鐘TF1TR1TF0TR0TCON(控制寄存器)外部中斷相關位T0x12T1x12AUXR(輔助寄存器)計數功能的使用示例:使用定時器/計數器T1的計數功能,實現每計三個數,P1.0引腳連接LED燈的狀態取反一次。示例硬件設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED發光二極管LED-BIGY13電阻RES1k14按鍵BUTTON1計數功能的使用示例3:使用定時器/計數器T1的計數功能,實現每計三個數,P1.0引腳連接LED燈的狀態取反一次。初始值設置設定分頻系數工作方式設置啟動工作計數功能設置設定TH1、TL1(設定定時/計數初始值)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定TCON寄存器(啟動定時器開始工作)計數功能的使用——相關寄存器的設置設定TH0/1、TL0/1(設定定時/計數初始值)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定TCON寄存器(啟動定時器開始工作)T1門控位:GATE=1:由TR1和INT1共同啟動工作GATE=0:使用TR1啟動工作TMOD(89h)工作方式寄存器GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1功能選擇位:=1:計數功能=0:定時功能T1工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0工作方式選擇位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0功能選擇位:=1:計數功能=0:定時功能T0門控位:GATE=1:由TR0和INT0共同啟動工作GATE=0:使用TR0啟動工作T0T1用定時器T1方式0實現計數功能TMOD=01000000;TMOD=0X40;設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)計數功能的使用——相關寄存器的設置設定TH0/1、TL0/1(設定定時/計數初始值)設置TMOD寄存器(設定定時功能、選擇工作方式、GATE)設定TCON寄存器(啟動定時器開始工作)設定TH0/1、TL0/1(設定定時/計數初始值)T初值0M+1計數啟動計數計數溢出(TFx=1)完成一次計數方式0計3個數:TH1=(65536-3)/256;
TL1=(65536-3)%256;計數器初始值=65536-需要計的脈沖個數=65536-3計數功能的使用——示例講解示例:使用定時器/計數器T1的計數功能,實現每計三個數,P1.0引腳連接LED燈的狀態取反一次。示例程序編寫#include<stc15.h>sbit LED=P1^0;voidmain(){ TMOD=0X40;//使用定時器1,計數方式,方式0 TH1=(65536-3)/256;//設置計3個數的計數初始值 TL1=(65536-3)%256; ET1=1;//允許定時器中斷0發生 EA=1;//允許總中斷發生 TR1=1; while(1);//原地踏步指令}jishu()interrupt3using1//定時器/計數器T1中斷服務函數{ LED=!LED;//led燈的狀態改變
}中斷源名稱中斷號外部中斷00定時器/計數器0中斷1外部中斷12定時器/計數器1中斷3定時器計數器的綜合應用示例4:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例硬件設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED發光二極管LED-RED83電阻RES1kΩ84按鍵BUTTON1定時器計數器的綜合應用示例4:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例分析500ms定時功能的實現——定時器定時功能;P3.5按鍵次數統計——定時器計數功能定時器計數器的綜合應用示例:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例程序編寫#include<stc15.h>#defineMAIN_Fosc11059200#include<intrins.h>//添加循環左移右移庫函數所在頭文件bitdir=0;//定義全局變量dir進行方向控制voidmain(){
P1=0x7f;//設置P1端口初始值,led燈的初始狀態 TMOD=0x40;//T0為定時功能,方式0;T1為計數功能,方式0 TH0=(65536-MAIN_Fosc/1000)/256;//定時器T0定時1ms初始值設定 TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;//T0不分頻 TH1=0xff; //T1的初值為0xff,計1個數 TL1=0xff;定時器計數器的綜合應用示例:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例程序編寫
ET0=1;//允許T0中斷 ET1=1;
//允許T1中斷 TR0=1;//啟動T0定時 TR1=1;
//啟動T1計數 EA=1;//CPU開中斷 while(1);}voidtime1()interrupt3using2{ dir=~dir; //每次按下按鈕產生T1的溢出中斷,將dir求反}定時器計數器的綜合應用示例:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例程序編寫voidtime0()interrupt1
using1{
unsignedinti;//統計定時器T0定時1ms次數
i++;//每中斷一次,計數器加1
if(i==500)//中斷500次實現500ms秒定時
{
i=0;//為下一次500ms定時做準備 if(dir==0)//根據dir變量的值設定led燈的移動方向
P1=_crol_(P1,1); else
P1=_cror_(P1,1); }}定時器計數器的綜合應用示例:定時器計數器的綜合應用。如圖所示,P1口控制8只LED燈輪流點亮,每只LED燈點亮時間為500ms,P3.5引腳上的按鍵控制LED燈移動的方向,初始狀態時LED燈循環左移,按鍵每按下一次,LED燈移動的方向改變一次。示例程序編寫
ET0=1;//允許T0中斷 ET1=1;
//允許T1中斷 TR0=1;//啟動T0定時 TR1=1;
//啟動T1計數 EA=1;//CPU開中斷 while(1);}voidtime1()interrupt3using2{ dir=~dir; //每次按下按鈕產生T1的溢出中斷,將dir求反}任務4.1電子鐘的實現——軟件設計任務
電子秒表軟件設計任務3-1:DS18B20電路設計任務3-1:DS18B20電路設計任務介紹秒表的走時范圍是0-59秒;在兩位數碼管上顯示走時效果;P3.2引腳上的按鍵控制秒表狀態:程序運行時,秒表開始走時;按鍵按下一次,秒表停止走時;按鍵按下兩次,秒表清零。任務
電子秒表軟件設計任務3-1:DS18B20電路設計任務3-1:DS18B20電路設計任務介紹秒表的走時范圍是0-59秒;在兩位數碼管上顯示走時效果;P3.2引腳上的按鍵控制秒表狀態:程序運行時,秒表開始走時;按鍵按下一次,秒表停止走時;按鍵按下兩次,秒表清零。1s鐘定時秒的走時數碼管的顯示按鍵的識別和處理任務
電子秒表軟件設計任務分析主函數
main():
初始化
數碼管顯示定時器T0中斷服務函數:定時、秒的走時
delay_1s()interrupt1using1外部中斷0服務函數:按鍵識別和處理
anjian()interrupt0using2①②1s鐘定時秒的走時數碼管的顯示按鍵的識別和處理任務
電子秒表軟件設計開始定時器初始化中斷初始化顯示秒的個位顯示秒的十位主函數流程圖任務程序編寫voidmain(){ TMOD=0X00;//設置定時器T0工作在定時功能,方式0 TH0=(65536-MAIN_Fosc/1000)/256;//T0不分頻定時1ms的初始值 TL0=(65536-MAIN_Fosc/1000))%256; AUXR=AUXR|0X80;//設置定時器T0不分頻 ET0=1;//允許定時器中斷0發生 IT0=1;//外部中斷0下降沿有效 EX0=1;//允許外部中斷0發生 EA=1;//允許總中斷發生 TR0=1;//啟動定時器T0開始工作 while(1)
{
P0=led_disp_code_gongyang[miao/10];//用于顯示秒的高位
P2=led_disp_code_gongyang[miao%10];//用于顯示秒的低位
}}任務
電子秒表軟件設計定時器T0中斷服務函數1s是否到?秒+160s是否到?秒清零中斷函數返回定時器T0中斷服務函數流程圖任務程序編寫delay_1s()interrupt1using1//定時器0中斷服務函數{ unsignedinti;//用于1ms定時次數的統計 i++; if(i==1000)
{
i=0;
miao++;//1s鐘時間到,miao加1
if(miao==60)
miao=0;
}}YYNN任務
電子秒表軟件設計統計按鍵按下次數?外部中斷0服務函數2次3次停止走秒秒清零中斷函數返回開始走秒1次外部0中斷服務函數流程圖任務程序編寫anjian()interrupt0using2//外部中斷0服務函數{ delay_ms(10); if(P32==0) { count_anjian++;
if(count_anjian==3)//按鍵按下次數統計為0-2 count_anjian=0; switch(count_anjian) {
case1:TR0=0;break;//按鍵按下一次,秒表停止走秒
case2:miao=0;break;//按鍵按下兩次,秒清零
default:TR0=1;//其他情況,秒表正常走秒 }while(!P32); }}任務
電子秒表軟件設計秒表的走時范圍是0-59秒;在兩位數碼管上顯示走時效果;P3.2引腳上的按鍵控制秒表狀態:程序運行時,秒表開始走時;按鍵按下一次,秒表停止走時;按鍵按下兩次,秒表清零。任務介紹keil中示例程序編寫
系統仿真調試的過程不會那么一帆風順,需要我們具備不忘初心、砥礪前行、精益求精、一絲不茍的嚴謹作風。在這種精神的指引下把自己內在的潛力挖掘出來,培養我們不斷追求、勇于探索的科學精神。
電子秒表的實現任務
簡易電子鐘的實現——任務介紹&數碼管動態顯示簡易電子鐘的實現完成電子鐘24小時制時、分、秒的走時;在8位數碼管上的顯示,顯示格式為:時-分-秒;任務介紹簡易電子鐘整體設計單片機模塊8位數碼管模塊簡易電子鐘的實現示例:
數碼管動態顯示指定信息。在8位數碼管上顯示數字0-7。簡易電子鐘的實現靜態顯示方式中,數碼管的段控端需要單獨連接到一組并行口。
優點:顯示穩定、無閃爍、占用CPU時間少;缺點:但所需的硬件資源較多。如果有8位數碼管,將占用56條口線,所以靜態顯示方式僅適用于位數較少的應用場合。數碼管的靜態顯示簡易電子鐘的實現數碼管動態顯示動態顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。優點:是占用的單片機IO口較少;缺點:編程復雜,亮度會受到驅動程序的設計的影響。簡易電子鐘的實現數碼管動態顯示電路設計數碼管動態顯示電路圖科普:視覺暫留(Persistenceofvision)
現象是光對視網膜所產生的視覺在光停止作用后,仍保留一段時間的現象,其具體應用是電影的拍攝和放映。人眼的視覺暫留時間是0.05秒,因此,當連續的圖象變化超過每秒24幀畫面的時候,人眼便無法分辨每幅單獨的靜態畫面。abcdfgdp12345678910eeabcdfgdpCOMCOM簡易電子鐘的實現數碼管動態顯示電路設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED數碼管7SEG-MPX8-CA-BLUE共陽極13排阻RX847014鎖存器74HC373174HC373鎖存器,當OE端送低電平,LE端送高電平,74HC373工作在直通模式。簡易電子鐘的實現數碼管動態顯示程序設計示例:
數碼管動態顯示指定信息。在8位數碼管上顯示數字0-7。送位碼送段碼熄滅數碼管保持1ms是否完成8位顯示?YN1000000000000011unsignedcharcodeled_disp_code_gongyang[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};main(){ unsignedcharaa;unsignedintj; while(1) { aa=0x01; for(j=0;j<8;j++) {
P2=aa;
P0=led_disp_code_gongyang[j];
delay_ms(1);//延時1ms
P2=0x00;
aa=aa<<1;}}}簡易電子鐘的實現數碼管動態顯示程序設計示例:
數碼管動態顯示指定信息。在8位數碼管上顯示數字0-7。P0=0xff;1000000000000011簡易電子鐘的實現示例:數碼管動態顯示秒。在8位數碼管的7、8位實現電子秒表中秒的動態顯示。主函數
main()
顯示子函數:xianshi()定時器T0中斷服務函數:
delay_1s()interrupt1using1簡易電子鐘的實現示例:數碼管動態顯示秒。在8位數碼管的7、8位實現電子秒表中秒的動態顯示。voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256;//T0不分頻,定時1ms TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;
ET0=1;//允許定時器中斷0發生
EA=1;//允許總中斷發生 TR0=1; while(1) { xianshi(); }}開始初始化顯示簡易電子鐘的實現示例:數碼管動態顯示秒。在8位數碼管的7、8位實現電子秒表中秒的動態顯示。voidxianshi(){
P2=0x40;//第7位數碼管工作
P0=led_disp_code_gongyang[miao/10];//顯示秒的十位
delay_ms(1);//延時1ms P2=0x00;
P2=0x80;//第8位數碼管工作
P0=led_disp_code_gongyang[miao%10];//顯示秒的個位
delay_ms(1);//延時1ms P2=0x00;}顯示子函數入口顯示秒的十位子函數返回顯示秒的個位送位碼送段碼熄滅數碼管保持1ms任務
電子秒表軟件設計定時器T0中斷服務函數1s是否到?秒+160s是否到?秒清零中斷函數返回定時器T0中斷服務函數流程圖delay_1s()interrupt1using1//定時器0中斷服務函數{ unsignedinti;//用于1ms定時次數的統計 i++; if(i==1000)
{
i=0;
miao++;//1s鐘時間到,miao加1
if(miao==60)
miao=0;
}}YYNN示例:數碼管動態顯示秒。在8位數碼管的7、8位實現電子秒表中秒的動態顯示。任務
簡易電子鐘的實現——硬件電路設計完成電子鐘24小時制時、分、秒的走時;在8位數碼管上的顯示,顯示格式為:時-分-秒;任務介紹任務
簡易電子鐘的實現任務介紹示例軟件設計完成電子鐘時、分、秒的走時;在8位數碼管上的顯示,顯示格式為:時-分-秒;main():系統初始化、調用走時等子函數;delay_1s():用定時器中斷完成1s定時;zoushi():電子鐘時、分、秒的走時;chaifen():時、分、秒的拆分;xianshi():時鐘信息的顯示。任務
簡易電子鐘的實現示例程序編寫開始系統初始化調用拆分子函數調用走時子函數調用顯示子函數簡易電子鐘主函數流程圖voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256;//T0不分頻,定時1ms TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;
ET0=1;//允許定時器中斷0發生
EA=1;//允許總中斷發生 TR0=1; while(1) { zoushi(); //調用走時子函數 chaifen(); //調用拆分子函數 xianshi(); //調用顯示子函數 }}任務
簡易電子鐘的實現示例程序編寫中斷函數入口統計1ms定時次數設置1s鐘標志位為1delay_1s()interrupt1using1//定時器T0中斷服務函數{ unsignedintn;//用于1ms定時次數的統計 n++; if(n==1000) { flag_1s=1; n=0; }}1s鐘時間到?中斷函數返回YN定時器T0中斷服務函數任務
簡易電子鐘的實現示例程序編寫YSecond=0NFlag_1s=1?YN++minute=60?++second=60?YFlag_1s=0minute=0N++hour=24?hour=0NY走時子函數入口子函數返回voidzoushi(){ if(flag_1s)
{
flag_1s=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;}
}
}
}}任務
簡易電子鐘的實現示例程序編寫led_disp_code_gongyang[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};voidchaifen(){ dis[0]=shi/10; dis[1]=shi%10; dis[2]=10; dis[3]=fen/10; dis[4]=fen%10; dis[5]=10; dis[6]=miao/10; dis[7]=miao%10;}拆分子函數入口拆分時的十位橫線拆分時的個位拆分分的十位橫線拆分分的個位拆分秒的十位拆分秒的個位子函數返回led_disp_code_gongyang[10]任務
簡易電子鐘的實現示例程序編寫voidxianshi(){ unsignedcharaa; unsignedinti; aa=0x01; for(i=0;i<8;i++) { P2=aa; P0=led_disp_code_gongyang[dis[i]]; delay_ms(1);//延時1ms P2=0X00; aa=aa<<1; }}送位碼送段碼熄滅數碼管保持1ms是否完成8位顯示?YN子函數返回顯示子函數入口
根據理論知識去分析問題、進而解決問題。實踐是檢驗真理的唯一標準,理論和實踐相輔相成,缺一不可。我們需要養成嚴謹的思維習慣,以邏輯與事實為基礎,養成不草率、不盲從的獨立思考的辯證思維,能夠重構優化電子系統的設計。
簡易電子鐘的實現謝謝觀看!任務
帶調時、整點報時功能電子鐘的實現任務
帶調時、整點報時功能電子鐘的實現任務介紹
走時功能,能完成24小時制的時鐘走時;
調時功能,能夠使用按鍵完成電子鐘時、分、秒的調時;
顯示功能,在8位數碼管上顯示當前時間,格式為時-分-秒;調時過程中,只顯示調整的部分;
整點報時功能。①②③④任務
帶調時、整點報時功能電子鐘的實現——整體設計單片機模塊數碼管模塊按鍵模塊蜂鳴器模塊帶調時、整點報時功能電子鐘的實現任務分析——按鍵模塊序號名稱功能1功能鍵按下一次進入調時模式,按下兩次進入調分模式,按下三次進入調秒模式,按下四次恢復走時模式。2加鍵在調時/調分/調秒模式中,對相應內容加1,加到最大值,從0開始。3減鍵在調時/調分/調秒模式中,對相應內容減1,減到0從最大值開始。帶調時、整點報時功能電子鐘的實現①電子鐘用8位數碼管完成顯示。②在走時模式下,顯示格式為“時-分-秒”,③在調時模式下只顯示正在調整的信息,如調整小時是,只顯示“時”,調整分鐘時,只顯示“分”。任務分析——數碼管模塊任務分析——蜂鳴器模塊蜂鳴器模塊用于實現整點報時功能。帶調時、整點報時功能電子鐘的實現任務硬件設計序號引腳名稱1P3.2功能鍵2P3.3加鍵3P3.6減鍵P34P32P33P36帶調時、整點報時功能電子鐘的實現任務硬件設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED數碼管7SEG-MPX8-CA-BLUE共陽極13排阻RX8470Ω14鎖存器74HC37315電阻RES1kΩ16三極管PNP17蜂鳴器BUZZER18按鍵BUTTON常開3帶調時、整點報時功能電子鐘的實現工作流程設計上電時,系統進入時鐘走時和8位數碼管的顯示模式,初始時間可以設為12點59分56秒;12014當整點時,如13點0分0秒,蜂鳴器進行整點報時。3當功能鍵按下時,進入時間調整模式,8位數碼管中的2位顯示正在調整的信息,其余位不顯示。調時模式時,可以對時、分、秒進行加減修改;22014帶調時、整點報時功能電子鐘的實現序號函數名稱函數功能1main()
系統初始化、子函數調用2key()功能鍵按鍵識別,統計按鍵次數3tiaoshi()
調時過程中,調整時的數值4tiaofen()
調時過程中,調整分的數值5tiaomiao()
調時過程中,調整秒的數值6alarm()整點報時7zoushi()
電子鐘時、分、秒的走時8chaifen()
時、分、秒的拆分9xianshi()
時鐘的顯示10delay_1s()用定時器中斷完成1s定時11delay_ms()ms級別延時子函數帶調時、整點報時功能電子鐘的實現任務軟件設計主函數入口系統初始化調用功能鍵子函數調用走時子函數調用整點報時子函數調用拆分子函數調用顯示子函數主函數流程圖main(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1; EA=1; TR0=1; while(1) { key();//調用功能鍵子函數
zoushi();//調用走時子函數
alarm();//調用整點報時子函數
chaifen();//調用拆分子函數
xianshi();//調用顯示子函
}}帶調時、整點報時功能電子鐘的實現任務軟件設計功能鍵函數入口統計次數清零功能鍵掃描停止走時子函數返回1次4次S1按鍵識別子函數voidkey(){if(gongneng==0){ delay_ms(10);//延時10ms if(gongneng==0) { key1count++;//統計功能鍵按下次數 TR0=0;//進入調時狀態,停止走時 if(key1count==4)//設置功能鍵的范圍是0-3 { key1count=0; } while(!gongneng); }}}
調秒調分2次3次調時走時統計功能鍵按下次數帶調時、整點報時功能電子鐘的實現任務軟件設計S1按鍵識
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年常見疾病病人的護理
- 2024年1月化糞池疏通與雨污分流改造聯動施工合同
- 美甲聊天教學課件
- 腦卒中靜脈溶栓后的護理
- 汽車行業投放指南
- 2024珠海市第一中等職業學校工作人員招聘考試及答案
- 2024泉州市南方科技職業技術學校工作人員招聘考試及答案
- 2024滬東中華造船集團高級技工學校工作人員招聘考試及答案
- 2024河南工業職業技術學院工作人員招聘考試及答案
- 民間借貸及擔保合同范本
- 260噸汽車吊地基承載力驗算
- 青島版六年級數學上冊 (完美的圖形)教學課件(第1課時)
- 2022新能源光伏發電工程竣工決算報告模板
- 2023超星爾雅《創新創業》答案
- 110kV變電站短路電流計算書
- 船舶帶纜知識學習
- 2023年湖北省武漢市中考英語真題(含答案)
- 全面地476種食物升糖指數一覽表
- 自然交易理論基礎與進階(自然交易理論叢書)
- 2023年考研考博-考博英語-河北工業大學考試歷年高頻考點真題薈萃帶答案
- 國際關系理論智慧樹知到答案章節測試2023年外交學院
評論
0/150
提交評論