六节电子钟程序设计

上传人:zw****58 文档编号:51474894 上传时间:2018-08-14 格式:PPT 页数:24 大小:316KB
返回 下载 相关 举报
六节电子钟程序设计_第1页
第1页 / 共24页
六节电子钟程序设计_第2页
第2页 / 共24页
六节电子钟程序设计_第3页
第3页 / 共24页
六节电子钟程序设计_第4页
第4页 / 共24页
六节电子钟程序设计_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《六节电子钟程序设计》由会员分享,可在线阅读,更多相关《六节电子钟程序设计(24页珍藏版)》请在金锄头文库上搜索。

1、3.6 电子表程序设计电子表是单片机简单系统最典型的项目, 本节学习使用动态扫描的方式实现6位数码管组 成的电子钟的设计方法,主要目的是让读者掌 握结构化程序设计方法,了解利用数组变量实 现数码管数字显示技巧;并熟练掌握键盘的控 制编程方式。本案例设计分阶段进行,首先使用定时器 的中断实现时钟的显示,按键程序实现时间调 整,并通过定时器中断实现调整时数字的闪烁 。3.6.1 设计任务电子表使用6位数码管显示时分秒,每个占 用两个数码管。使用4个键控制,采用的电路见 图3.6.1所示。六位数码管的段选连接在单片机 的P0口,位选连接在单片机的P2口,从右至左 分别从P2.0到P2.5。键盘连接在

2、P3.2到P3.5口 。蜂鸣器连接在单片机的P1.7口。 图3-6-1 硬件电路图3.6.2 系统功能分析一、键盘控制键盘控制是本设计中的重要部分,在键盘上 实现全部的功能的调整,首先需要定义各个按键的 主要功能,功能如表2-6-1所示。KEY1键负责调 整模式的选择,带有去抖功能,每按下一次,改变 一次状态,共有四种状态,启动默认进入正常状态 ,其后依次为调秒,调分,调时状态。KEY2、 KEY3在对应的模式下进行加或者减,也带有去抖 功能。KEY4键为快速返回按钮,按下此键后,立 刻从其他状态进入正常状态。 二、显示时间输出显示终端为6位数码管,从左到右分别显示时 分秒,小时、分钟和秒各占

3、2位数码管共6位。在调 整过程中,要求对应的调整位置以0.5的速度进行闪 烁,以示区别 3.6.3 实例代码/*/ #include #define uchar unsigned char uchar i = 0,j = 0,k,flash,flash = 0x00; char sec,min,hou; uchar key1_down,key2_down,key3_down,key4_down,key1_mode; code uchar seven_seg = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; code uchar seven

4、_bit = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf; sbit key1 = P32; sbit key2 = P33; sbit key3 = P34; sbit key4 = P35; void delay (uchar x) /延迟函数 while(x-); void key_scan(void)/按键扫描函数 if(key1 = 0) /按键1 key1 = 1; delay(3000); if(key1 = 0) key1_down = 1; if(key1 = 1 key1_down = 0;if(key1_mode = 4)key1_mode = 1; if

5、(key2 = 0) /按键2 key2 = 1; delay(3000); if(key2 = 0)key2_down = 1; if(key2 = 1 sec+; if(key2 = 1 min+; if(key2 = 1 hou+; if(key3 = 0) /按键3 key3 = 1; delay(3000); if(key3 = 0) key3_down = 1; if(key3 = 1 sec-; if( sec = 100) /半秒 flash = flash; k+; i = 0; if(k = 2) /刚好1秒 k = 0; sec+; if(sec= 60)sec = 0;

6、min+;if(min = 60) min = 0; hou+; P2 = 1; if(key1_mode = 0) /正常显示 switch(j) case 0:P0 = seven_segsec%10 ;break;case 1:P0 = seven_segsec/10;break;case 2:P0 = seven_segmin%10 break; case 3:P0 = seven_segmin/10;break;case 4:P0 = seven_seghou%10 break;case 5:P0 = seven_seghou/10;break; P2 = seven_bitj; j

7、+; if(j=6) j=0; if(key1_mode = 1) /选定秒 k = 0; switch(j) case 0:P0 = seven_segsec%10 | flash;break;case 1:P0 = seven_segsec/10 | flash;break;case 2:P0 = seven_segmin%10 break; case 3:P0 = seven_segmin/10;break;case 4:P0 = seven_seghou%10 break;case 5:P0 = seven_seghou/10;break; P2 = seven_bitj; j+; i

8、f(j=6)j=0; if(key1_mode = 2) /选定分 switch(j) case 0:P0 = seven_segsec%10 ;break; case 1:P0 = seven_segsec/10 ;break; case 2:P0 = seven_segmin%10 break; case 3:P0 = seven_segmin/10 | flash;break; case 4:P0 = seven_seghou%10 break; case 5:P0 = seven_seghou/10;break; P2 = seven_bitj; j+; if(j=6) j=0;if(

9、key1_mode = 3) /选定时 switch(j) case 0:P0 = seven_segsec%10 ;break; case 1:P0 = seven_segsec/10 ;break; case 2:P0 = seven_segmin%10 break; case 3:P0 = seven_segmin/10 ;break; case 4:P0 = seven_seghou%10 break; case 5:P0 = seven_seghou/10 | flash;break; P2 = seven_bitj; j+; if(j=6) j=0; void main(void)

10、 sec = 55; min = 59; hou = 10; timer0_init(); while(1) key_scan(); /*/思考题:3-1 电路见题图3-1所示,完成程序设计并在 Proteus中设计电路,仿真实现LED闪烁。题图3-13-2 跑马灯又叫流水灯,能够达到明灭交替顺序显示 的效果,利用单片机的 P0口驱动8只LED可以实现 跑马灯效果,程序中可以先让P0 = 0x01,再加入延 时,然后让P0左移一位,依次循环,并判断如果P0 为0时,从新赋值0x01。请你完成这个程序的设计, 并在Proteus中设计电路仿真实现。 3-3 请你列出单片机内部所有特殊功能的寄存器

11、名。 3-4 分别写出外部中断、定时器中断、定时器中断和 串行中断的步骤。 3-5 简述定时器中断初始化步骤,如果定时器timer0 、timer1都产生中断,优先级如何设定?3-6 为了用药安全,病人打点滴的液体滴注速度在根 据不同用药都有限制, 但医生还在人工数说的方法 测量滴注速度,请你设计电路,并利用定时器的 3-7 采用外部中断实现4个按键输入,用一个数码管 显示按键编号,请画出电路并设计程序 3-8 在44键盘矩阵中,没有按键按下数码管会显示 88,现在要求没有按键按下时,显示NO,请在原来 程序的基础上更改实现。 3-9找一个电子手表,了解电表的功能并仔细观察按 键控制方式。 3-10 请你把电子表程序的各个模块组合在一起,设 计电子表的完整程序,并利用Proteus软件进行仿真 。 3-11 6位动态显示没有采用switch-case语句,而是采 用数组变量的形式,请你叙述这种现实方式的基本原 理。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号