一、本设计任务及完成的功能。
1、本设计任务:实现最长99s的倒计时功能;利用数码管或液晶屏显示数字;利用按键可以设置倒计时时间;设置倒计时开始启动键;时间到,声(光)报警,示意倒计时时间到。
2、完成的功能:实现了0~99s之间任意整数秒的倒计时,通过矩阵按键中0~9数字键设置倒计时间,按下*或#键开始倒计时,当倒计时间结束时,led灯亮,停止倒计时。
二、倒计时器硬件设计。
1、元器件。
at89c51单片机1个、两位动态共阴数码管1个、9个引脚的排阻、1k电阻3个、12mhz晶振1个、33pf电容2个、10uf极性电容1个、独立按键1个、4行3列矩阵按键1个、led指示灯1个、电源和地若干。
2、系统的硬件构成及功能。
最长99秒计时器的原理框图如图1所示。
图1 99秒计时器系统原理框图。
系统硬件连线:
1)p1口接矩阵按键
2)p2口接动态数码管的8个段选
3)p0^6、p0^7分别接动态数码管的十位和个位
4)p3^7接led指示灯
5)xtal1和xtal2接晶振
6)rst接复位电路
三、系统的软件设计。
本系统的软件系统主要可分为主程序设计和定时中断程序。
系统主程序设计。
主程序包括主函数、矩阵按键扫描函数、对矩阵按键扫描进行相应处理函数、动态数码管显示函数等。
1、矩阵按键扫描函数ankey()
矩阵按键的原理和方法:矩阵按键的两端都与单片机的i/o口相连,在检测时,人为的通过单片机i/o口送出低电平。检测时,先送一列为低电平,其余几列全为高电平(这时就确定了列数),然后立即轮流检测一次个行是否有低电平,若检测到某一行为低电平(这时就确定了行数),则可以确定单前被按下的键是哪行哪列。
同样,用这种方**流检测各行各列,这样就可以检测所有按键,当有键按下时,就可判断是哪个键被按下。当然,也可以将行线置为低电平,扫描列是否有低电平。
本设计用的是4行3列矩阵按键,它接at89c51单片机的p1口,接法如图所示:
当按下0~9数字键时,会产生相应数值赋给矩阵按键扫描函数中以定义的参数key,当按下#或*键时,会分别产生11或10赋给key。这时调用对矩阵按键扫描进行相应处理函数text(uchar )且key赋给它,text(uchar )函数对key值进行相应处理:如果只按下一次数字键,那这数字就会是倒计时的个位,如果按下两次数字键,那第一次的数字就会是倒计时的十位,第二次数字的数字就会是倒计时的个位,当按下#或*键时,开始倒计时。
2、动态数码管显示函数。
动态数码管显示就是轮流向各位数码管送出段选及相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人眼感觉各位数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流比较快,我们分辨不出来。本设计用的是两位动态共阴数码管显示,它和单片机的连接如图所示:
其中那排阻是驱动电路。
3、复位电路如图:
rst为复位信号输入端,高电平有效。系统上电后,当已经进行过倒计时,这时想进行不同时间的倒计时,只要按下复位按钮后,就可以进行新的倒计时。
中断函数设计。
先初始化中断函数:
tmod=0x01;设置定时器0为工作方式1(0000 0001)
th0=(65536-50000)/256;//装初值50ms一次中断。
tl0=(65536-50000)%256;
ea=1; /开总中断。
et0=1; /开定时器0中断
tr0=0; /先别启动中断,留着用按键启动,以便开始倒计时。
中断函数如下:
void t0_time() interrupt 1 //定时器0中断函数。
th0=(65536-50000)/256;//重装初值。
tl0=(65536-50000)%256;
numt0++;50ms中断一次
四、总体程序如下:
#include <>
#define uchar unsigned char
#define uint unsigned int
sbit sw=p0^6; /十位位选。
sbit gw=p0^7; /个位位选。
sbit led=p3^7;//led灯。
uchar code table=编码定义。
uchar numt0,num;
void delayms(uint);
void text(uchar);
void display(uchar numdis) /动态数码管显示子函数。
uchar shi,ge分离两个分别要显示的数。
shi=numdis/10;
ge=numdis%10;
sw=0;p2=table[shi]; 送十位段选数据。
delayms(5); 延时。
sw=1;gw=0;
p2=table[ge]; 送个位段选数据。
delayms(5);
gw=1;void delayms(uint x)//延时x ms
uint i,j;
for(i=x;i>0;i--)i=x即延时约x毫秒。
for(j=110;j>0;j--)
void ankey() 键盘扫描。
uchar temp,key;
p1=0xef;//第1行。
temp=p1;
temp=temp&0x0f;//temp高4位清0;
if(temp!=0x0f) /判断是否有键按下。
text(key);
while(temp!=0x0f)//判断按键是否释放。
p1=0xdf;//第2行。
temp=p1;
temp=temp&0x0f;
if(temp!=0x0f)
text(key);
while(temp!=0x0f)
p1=0xbf;//第3行。
temp=p1;
temp=temp&0x0f;
if(temp!=0x0f)
text(key);
while(temp!=0x0f)
p1=0x7f;//第4行。
temp=p1;
temp=temp&0x0f;
if(temp!=0x0f)
text(key);
while(temp!=0x0f)
void text(uchar key)//判断键盘扫描结果,并倒计时。
static uchar n,bb,s;//静态局部变量。
s=1;if(key==0||key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9)
n++;有数字键被按下,n加1
if(key==10||key==11)
n=3;//和#被按下,n置3
switch(n)
单片机课程设计
可变程序控制器是集微机技术 自动化技术 通讯技术于一体的通用工业控制装置。它可靠性强 性能 比高 使用方便,已在工业控制的各个领域里得到了极为广泛的应用,成为实现工业自动化的一种强有力的工具 1 plc的定义有许多种。国际电工委员会 iec 对plc的定义是 可编程控制器是一种数字运算操作的电子系统...
单片机课程设计
目录。内容提要2 关键词2引言3 一 硬件电路设计3 一 电路板原理3 二 电路元器件3 二 软件设计3 一 秒钟设计方案3 二 时钟设计方案4 结语7单片机时钟设计。内容摘要 一 在实验板上用动态扫描显示00 59秒钟,具体要求如下 一 6m晶振 二 l9 l10显示00 59十进制数并循环,间隔...
单片机课程设计
1 选题背景。1.1 家庭智能防盗报警系统设计的背景及目的。随着经济的发展,人们对防盗 防劫 防火保安设备的需求量大大增加。针对偷盗 抢劫 火灾 煤气泄漏等事故进行检测和报警的系统,其需求也越来越高。家居智能是以家为平台,兼备建筑 自动化,智能化于一体的高效 舒适 安全 便利的家居环境。自动化的家居...