基于单片机数字电子秒表电路设计内容摘要:

路的工作过程 FLASH ROM 中。 开启直流电源 +5V,经 R2C3 组成的微分电路将微处理器 AT89C5锁存芯片进行清零。 按清零键 ,时钟清零;按设置键,设置时钟初始值,并按北京时间要求把时、分依次通过 0— 9 和 0.— 设定;然后,按 OK 键,时钟开始计时。 :按暂停键将时钟暂停计时;通过按清零键,时钟清零;按 OK键,启动电子秒表开始计时;按暂停键,电子秒表暂停计时。 AT89C5锁存芯片 74HC138 和 74HC573 可靠工作,外加手动复位功能 SW1。 泰州 农业职业技术学院学生毕业论文 正文第 11 页 共 26 页 直流电源 220VR2200K7805+ 5V123412V+10 00 U F / 15 VC 2 +47 0U F / 15 V 图 六 直流电源电路图 首先通过变压器 T 进行交流变压为交流 12V,再经过桥式整流 VD1VD4 产生脉动,其计算公式为 UC1= 然后通过 RC 滤波,产生直流 的直流电压,其计算公式为 UC1= 经过三端稳压器 LM7805 和 LM7810 产生稳定的直流输出电压 +5V。 为了保证输出电压的稳定和减小交流波纹系数,增加滤波电容 C2和输出电阻 R2=200K,以保证输出直流电压的稳定。 泰州 农业职业技术学院学生毕业论文 正文第 12 页 共 26 页 表三 直流电源元件选择 序号 名称 型号 单位 数量 说明 1 变压器 TRANS1 个 1 进行交流变压 2 桥式整流器 IN4007 个 4 产生单向直流信号 3 电解电容 1000UF/15V 个 1 产生直流电压 4 三端稳压器 7805 个 1 产生稳定的直流输出电压 5 滤波电容 470FU/15V 个 1 滤波 6 电阻 2R 个 1 分压 主程序的设计构思 主程序有三个部分:第一部分是初始化设置,包括设置堆栈指针、 8279 初始化、定时器 /计数器初始化、显示缓冲区初始化、开中断、定时器 /计数器启动等。 定时器 /计数器初 始化就是选择定时器 /寄存器 TMOD 的工作方式,它的高 4位控制定时器 T1,低 4位控制定时器 T0。 TMOD 中各位的定义如下: T1 T0 GATE CF1 M1 M0 GATE CF1 M1 M0 0 0 0 1 0 0 0 0 TMOD 泰州 农业职业技术学院学生毕业论文 正文第 13 页 共 26 页 其中: CF1: T/C功能选择位,当 CF1=1 时为计数方式;当 CF1=0 时为定时方式。 M1M0:T/C 工作方式定义位, M1M0=01 时为工作方式, 16 位定时 /计数器。 TMOD=10H。 设置定 时 /计数器初始值,定时 10ms,计数初值 X=DC00H( MOV TL1, 00H MOV TH1,0DCH)。 显示缓冲区初始化,其显示缓冲区的首地址(最低位)为 50H。 共送入 8 个字符( MOV R0, 50H MOV R2, 08H)。 二部分主要是通过键扫描实现各种操作功能。 核心部分是键扫描子程序 KEYSCAN。 KEYSCAN 的主要功能是先通过读 8279 的状态字,判断是否有键按下,如有键按下则通过读 FIF0 RAM 命令,读得键值,通过查表得到相应的键号( 0~ F 号键相应的键号分别为 30H~ 3FH)。 KEYSCAN 子程序的出口条件是:如无键按下, A累加器的值为 00H;如有键按下, A累加器的值为 FFH, B 寄存器中的内容则为键号。 通过按键识别实现相应的操作功能。 各项操作功能如下: 按“ C”键,秒表清零功能:在主程序中将键号和 3CH 比较,如相等,则调用时钟清零子程序( CLEAR— T)。 该子程序功能是将显示缓冲区 50H~ 57H(分别存放十时、时、十分、分、十秒、秒、百毫秒、十毫秒的数值)全部清零,显示全零。 按“ A”键,时钟启动计时功能:在主程序中将键盘扫描所得键号和 3AH 比较,如相等,则调用时钟启动计时子程序 ( START— T)。 该子程序的功能是将 TR1置 1,启动定时器 /计数器 1 工作。 按“ D”键,时钟停止计时功能:在主程序中将键盘扫描所得序号和 3DH 比较,如相等,则调用时钟停止计时子程序( STOP_T)。 该子程序的功能是将 TR1 置 0,关闭定时器 /计数器 1。 按“ B”键,设置时钟初值功能:在主程序中将键盘扫描所得键号和 3BH 比较,如相等,则调用设置时钟初值子程序( SET_T)。 该子程序的功能是通过按 8 个数字键,设置时钟各位(十时、时、十分、分、十秒、秒、百毫秒和十毫秒)的初值。 程序的设计思路是:先通过键扫描确认是 否有键按下,然判断键值是否在 0~ 9之间(即键号是否在 30H~ 39H 之间),以排除非数字键。 后将键值( 0~ 9)依次送入显示缓冲区 50H~57HDANYUAN ,再调显示子程序实现显示。 其中调用了 GETWORD 子程序。 该子程序的功能是在键扫描判断出有键按下后,再判断是否按的是 0~ 9数字键(键号为 30H~ 39H)。 判断方法是将键号与 C6H 相加,如有进位,则表示非 0~ 9数字键。 若在 8次键入过程泰州 农业职业技术学院学生毕业论文 正文第 14 页 共 26 页 中任何一次输入了非数字键,则 8位 LED 数码管全部显示为零,要求重新输入。 SET_T子程序用一个循环程序实现上述 8次键入的功能。 第三部分是实现电子秒表的显示。 主要调用显示子程序 DISP。 该显示子程序与以前所述子程序不同之处是其中某些位要显示小数点。 按照课题要求,为区分时、分、秒、毫秒,要求时钟显示格式为 .,即 8位数据显示中每间隔一位要显示一个小数点。 为能显示小数点,本显示子程序中的 DISLED 子程序与以往有所不同,在以 LEDSEG 为起始地址的段码表中,增加了 16 个能显示小数点的段码值,如显示“ 3”的段码为 3FH,而显示“ 3.”的段码为 BFH。 这段码的变化在懂得 LED数码管工作原理的基础上应不难理解。 当在 DISLED 子程序的段码表中加入 16个带小数点的段码后,为实现预定的显示格式,只要在原显示子程序中加上一条 ADD A, 10H 指令即可。 这样,当要求显示数据为“ 3”时,原通过查表得到的段码应为 4FH,而现为 CFH,即显示“ 3.”,从而使 0LED 数码管上显示的数据均带有小数点。 泰州 农业职业技术学院学生毕业论文 正文第 15 页 共 26 页 主程序的 设计与实现 主程序流程图 定时器初始化 矩阵键盘扫描 是 是否有键按下 否 是 判断是否 OK键 定时器开始计时 否 是 判断是否设置键 调设置子程序 否 是 判断是否秒表键 转到秒表功能 否 是 判断是否秒清零键 清零秒表计数 否 秒表与时钟切换程序 数码管显示 图七 主程序的流程图 主程序的实现 include define uchar unsigned char define uint unsigned int 泰州 农业职业技术学院学生毕业论文 正文第 16 页 共 26 页 define clr time[0]=time[1]=time[2]=time[3]=time[4]=time[5]=time[6]=time[7]=0; uchar num, time[8]; //按键值,时间数组 uchar buffer[8]; //暂存时间 bit start, flag, add, sub, set, ok; //标志位 uchar code seg[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管段选 09 uchar code seg_[]={0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef}; //数码管段选 . void keyscan( void); //扫描矩阵键盘 void delay( uint a); //1ms延时 void display( uchar m); //数码管动态显示 void timer2_init( void) ; //定时器 2初始化 void time_process( void); //秒表与时钟切换处理 void timeset( void); //时间设置 //主函数 void main( void) { timer2_init(); //定时器 2初始化 while( 1) { keyscan(); //扫描矩阵键盘 timeset(); //时间设置 time_process(); //秒表与时钟切换数据处理 display( 9); //数码管动态显示 } } //1ms延 时 @12Mhz void delay( u。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。