項目四任務8-簡易秒表的設計_第1頁
項目四任務8-簡易秒表的設計_第2頁
項目四任務8-簡易秒表的設計_第3頁
項目四任務8-簡易秒表的設計_第4頁
項目四任務8-簡易秒表的設計_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目四簡易秒表設計單片機定時器結構任務一定時器寄存器的初始化任務二

定時器方式0的基本使用任務三

定時器方式1的基本使用任務四

定時器方式2的基本使用任務五定時器較長定時的實現(xiàn)任務六單片機驅動液晶任務七簡易秒表的設計任務八任務八簡易秒表的設計任務描述數字電子秒表具有顯示直觀、讀取方便、精度高等優(yōu)點,在計時中廣泛使用。

本設計用單片機組成數字電子秒表,力求結構簡單、精度高為目標。設計硬件電路主要有主控制器,計時與顯示電路和回零、啟動和停表電路等。主控制器采用單片機AT89C51,顯示電路采用一液晶LCD1602顯示計時時間。知識鏈接計時控制計時控制計時采用定時器T0中斷完成,定時溢出中斷周期為50ms,當溢出向CPU發(fā)出溢出中斷請求,每發(fā)出一次中斷請求就對毫秒計數單元進行加1,達到2次就對十毫秒位進行加1,依次類推,直到59分59.9秒重新復位。任務實施1.硬件電路2.程序設計1.硬件電路2.程序設計#include<REGX51.H>//包含頭文件#defineucharunsignedchar//定義uchar表示無符號字符型#defineuintunsignedint//定義uint表示無符號整型sbitrs=P2^0;//1602的數據/指令選擇控制線sbitrw=P2^1;//1602的讀寫控制線sbiten=P2^2;//1602的使能控制線sbitstart=P2^7;//啟動/暫停按鈕sbitreset=P2^6;//復位按鈕#defineDataPortP1uintcnt=0;//1s的次數的計數值uintnum=0;//進入中斷次數的計數值(一次50ms)uintnum1=0;//0.1s的次數的計數值/***********定時器初開始化函數*************/voidInitTimer0(){

TMOD=0x01;//選擇定時器0的工作方式1TH0=(65536-45872)/256;//裝初值(定時50ms),晶振11.0592MHz

TL0=(65536-45872)%256;EA=1;//打開總中斷

ET0=1;//打開定時器中斷

TR0=0;//先不要啟動定時器

}

/***********ms級延時函數*************/voidDelayms(uintx)//延時xms{uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}/***********定時器中斷服務函數*************/voidTIMER0()interrupt1{TH0=(65536-45872)/256;//重裝初值

TL0=(65536-45872)%256;num++;//讓進入中斷次數值加1,用于判斷是否達到1snum1++;//讓進入中斷次數值加1,用于判斷是否達到0.1s}voidLCD_Check_Busy(void){while(1){DataPort=0xff;rs=0;rw=1;en=0;_nop_();en=1;if(DataPort&0x80)break;}en=0;delay(2);}voidlcd_wcom(ucharcom)//1602寫命令函數(單片機給1602寫命令){LCD_Check_Busy();//1602接收到命令后,不用存儲,直接由HD44780執(zhí)行并產生相應動作

rs=0;//選擇指令寄存器

rw=0;//選擇寫

P1=com;//把命令字送入P2en=1;//使能線電平變化,命令送入1602的8位數據口

en=0;}voidlcd_wdat(uchardat)//1602寫數據函數{ LCD_Check_Busy();rs=1;//選擇數據寄存器

rw=0;//選擇寫

P1=dat;//把要顯示的數據送入P2en=1;//使能線電平變化,數據送入1602的8位數據口

en=0;}voidlcd_init()//1602初始化函數{lcd_wcom(0x38);//8位數據,雙列,5*7字形

lcd_wcom(0x0c);//開啟顯示屏,關光標,光標不閃爍

lcd_wcom(0x06);//顯示地址遞增,即寫一個數據后,顯示位置右移一位

lcd_wcom(0x01);//清屏

}/*************主程序*************/voidmain(){uintms100=0;//秒的十分位uints,s1,min,min1,minu=0;//依次是秒的個位,秒的十位,分的個位,分的十位ucharm=0;

InitLcd1602();//初始化液晶

InitTimer0();//初始化定時器

while(1)//進入死循環(huán){if(start==0)//檢測啟動/暫停鍵是否按下

Delayms(20);//延時消抖

{if(start==0)//消抖之后再次檢測

{TR0=~TR0;//定時器的控制位取反

while(!start);//等待按鍵釋放

}}if(reset==0)//檢測復位鍵是否按下{Delayms(20);//延時消抖

if(reset==0)//消抖之后再次檢測

{num=0;num1=0;//進入中斷次數值清0ms100=0;//十分位的計數值清0cnt=0;//秒的計數值清0minu=0;//分的計數值清0while(!reset);//等待按鍵釋放

}}if(num1>=2)//檢測是否達到0.1s,(兩個50ms)

{num1=0;//進入中斷次數值清零

ms100++;//秒的十分位的計數值加1if(ms100>=10)//若秒的十分位計數值達到10{ms100=0;//清零秒的十分位的計數值

num1=0;//進入中斷次數值置0}}

if(num>=20)//判斷計時時間是否達到1s(20個50ms)

{num=0;//進入中斷次數值置0cnt++;//秒的計數值加1if(cnt>=60)//判斷是否達到60s{cnt=0;//若達到60s,將秒的計數值置零

minu++;//分的計數值加1if(minu>=60)//判斷是否達到60分鐘,{TR0=!TR0;//達到60分鐘則關閉定時器并清零所有的計數值

num1=0;

num=0;ms100=0;cnt=0;minu=0;

}}}s=cnt%10;//從秒的計數值里面分離秒的個位

s1=cnt/10;//從秒的計數值里面分離秒的十位

min=minu%10;//從分的計數值里面分離分的個位

min1=minu/10;//從分的計數值里面分離分的十位

str[0]=min1+'0';//將min1數字轉成字符型存數組str[0]位置str[1]=min+'0'; str[2]=':'; str[3]=s1+'0'; str[4]=s+'0'; str[5]=':'; str[6]=ms100+'0'; str[7]='\0'; lcd_wcom(0x80);//顯示地址設為80H(即00H,)上排第一位(也是執(zhí)行一條命令)

for(m=0;m<8;m++)//將str[]中的數據依次寫入1602顯示

{lcd_wdat(s

溫馨提示

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

評論

0/150

提交評論