项目四简易秒表设计
单片机定时器结构任务一定时器寄存器的初始化任务二定时器方式0的基本使用任务三定时器方式1的基本使用任务四定时器方式2的基本使用任务五定时器较长定时的实现任务六单片机驱动液晶任务七简易秒表的设计任务八
任务八简易秒表的设计
任务描述数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。设计硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。主控制器采用单片机AT89C51,显示电路采用一液晶LCD1602显示计时时间。
知识链接计时控制
计时控制计时采用定时器T0中断完成,定时溢出中断周期为50ms,当溢出向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加1,达到2次就对十毫秒位进行加1,依次类推,直到59分59.9秒重新复位。
任务实施1.硬件电路2.程序设计
1.硬件电路
2.程序设计#includeREGX51.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.0592MHzTL0=(65536-45872)%256;EA=1;//打开总中断ET0=1;//打开定时器中断TR0=0;//先不要启动定时器}/***********ms级延时函数*************/voidDelayms(uintx)//延时xms{uinti,j;for(i=x;i0;i--)for(j=110;j0;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(DataPort0x80)break;}en=0;delay(2);}
voidlcd_wcom(ucharcom)//1602写命令函数(单片机给1602写命令){LCD_Check_Busy();//1602接收到命令后,不用存储,直接由HD44780执行并产生相应动作rs=0;//选择指令寄存器rw=0;//选择写 P1=com;//把命令字送入P2en=1;//使能线电平变化,命令送入1602的8位数据口e