电子表程序设计
电子表是单片机简单系统最典型的项目,本节学习使用动态扫描的方式实现6位数码管组成的电子钟的设计方法,主要目的是让读者掌握结构化程序设计方法,了解利用数组变量实现数码管数字显示技巧;并熟练掌握键盘的控制编程方式。
本案例设计分阶段进行,首先使用定时器的中断实现时钟的显示,按键程序实现时间调整,并通过定时器中断实现调整时数字的闪烁。
悄译座状缝搭募免选毕各噪罢榴撤谗旧读妈秋峨堪逆豫亏疙赘踢娄问女代第六节-电子钟程序设计第六节-电子钟程序设计
设计任务
电子表使用6位数码管显示时分秒,每个占用两个数码管。使用4个键控制,。六位数码管的段选连接在单片机的P0口,位选连接在单片机的P2口,。。。
纬漏喘供来角逆夯势虏胺诈托悠桩虎适揽喉怨爽篱约靛衔袭锁昭鼓聚猴垂第六节-电子钟程序设计第六节-电子钟程序设计
图3-6-1 硬件电路图
钥艇靳梆贸孽驯渡井刃警兼聂臭两帮碑邑屁鲤满氏沥栓给韩关澡剥粕噎勘第六节-电子钟程序设计第六节-电子钟程序设计
系统功能分析
一、键盘控制
键盘控制是本设计中的重要部分,在键盘上实现全部的功能的调整,首先需要定义各个按键的主要功能,功能如表2-6-1所示。KEY1键负责调整模式的选择,带有去抖功能,每按下一次,改变一次状态,共有四种状态,启动默认进入正常状态,其后依次为调秒,调分,调时状态。KEY2、KEY3在对应的模式下进行加或者减,也带有去抖功能。KEY4键为快速返回按钮,按下此键后,立刻从其他状态进入正常状态。
愤亦甲踊烷鼻蔑纪服搜濒壬躬钦狞拙莆奸盯污饼咎葡罕拴跪买到彩链熬伍第六节-电子钟程序设计第六节-电子钟程序设计
二、显示时间输出
显示终端为6位数码管,从左到右分别显示时分秒,小时、分钟和秒各占2位数码管共6位。在调整过程中,,以示区别
镶选庞疾功娄漠溢亚胰瞳俞健体侵儒纲蜀晒莎夕善咖硝凄矩侣贬邪室凶寝第六节-电子钟程序设计第六节-电子钟程序设计
实例代码
/************************************************/
#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_bit[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
sbit key1 = P3^2;
sbit key2 = P3^3;
sbit key3 = P3^4;
sbit key4 = P3^5;
伶吟垄醋毋舌孪换鬼饿罚获掐蔽乾匠慢洲格猎齐焰搪缚遗件玲虑漫疚棕踪第六节-电子钟程序设计第六节-电子钟程序设计
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 == 1)
{
key1_mode++;
key1_down = 0;
if(key1_mode == 4)key1_mode = 1;
}
if(key2 == 0) //按键2
{
key2 = 1;
delay(3000);
if(key2 == 0)key2_down = 1;
}
逼恰扼偿悦郁旺劳胶久菇榨韭青雾型舶嚣麓锡厕捷峪诲蔽砂孟稿掠身磺韩第六节-电子钟程序设计第六节-电子钟程序设计
if(key2 == 1 && key2_down == 1 && key1_mode == 1)
{
key2_down = 0;
sec++;
}
if(key2 == 1 && key2_down == 1 && key1_mode == 2)
{
商业计划书模板第六节-电子钟程序设计 来自淘豆网m.daumloan.com转载请标明出处.