1、简介
该设计在硬件方面主要采用AT89C51单片机作为主控核心,2位数码管液晶显示屏显示计时信息,同时还具有设置倒计时时间、复位等功能。
2、主要功能
a.通过2位数码管显示倒计时器信息,倒计时范围:0到99秒。
b.通过独立按键设置启动、倒计时时间。
3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言
4、源程序
使用keil C51软件实现程序编写与编译。
#include <reg51.h>
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管 0-9
sbit led=P3^0;
sbit s1=P2^2;
sbit s2=P2^3;
sbit k0=P2^0;
sbit k1=P2^1;
int sec=0,i,a,b=20,key1;
/*-----延迟函数-------*/
void delay(int z)
{
while(z-->0);
}
/*-----显示函数-------*/
void display(int n)
{
if(n>0)
{
s2=1;s1=0; //显示十位
P0=tab[n/10]; //除10,取十位数值
delay(100); //延迟显示
s1=1;s2=0; //显示个位
P0=tab[n%10]; //求余,取个位数值
delay(100); //延迟
}
else
{ //当输入值小于0,显示0
s2=1;s1=0; //显示十位
P0=tab[0]; //除10,取十位数值
delay(100); //延迟
s1=1;s2=0; //显示个位
P0=tab[0]; //求余,取个位数值
delay(100); //延迟显示
}
}
/*-----外部中断0中断服务函数----------*/
void RESET() interrupt 0
{
sec=0; //恢复初始值
b=20; //恢复初始值
TR0=0; //关闭定时器
}
/*-----外部中断1中断服务函数----------*/
void START() interrupt 2
{
TR0=1; //打开定时器
}
/*-----定时器T0服务函数,计时功能----------*/
void timer0() interrupt 1
{
i--; //50ms时间到
TH0=(65536-50000)/256; //存放高8位,50ms
TL0=(65536-50000)%256; //存放低8位
if(i==0)
{
i=17; //1s计数
sec++; //软件计数1s
}
}
/*------键值扫描函数----------*/
void key()
{
k0=1;k1=1; //读按键
key1=P2; //将P2的值赋值给key1
key1=key1&0x03; //屏蔽高6位,保留k0,k1的值
while(key1!=0x03) //判断是否有按键按下
{
delay(600); //消抖动
key1=P2;
key1=key1&0X03;
while(key1!=0x03) //当有按键按下时
{
if(k0==0) b=b+1; //按下k0按键时,初始值加1
else b=b-1; //按下k1按键时,初始值减1
k0=1;k1=1; //判断按键是否抬起
key1=P2; //重新将P2的值赋值给key1
key1=key1&0x03;
while(key1!=0x03) //判断是否有按键按下
{
key1=P2;
key1=key1&0x03;
}
}
}
}
5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
7、资料获取方式
有偿,下载链接:LL01基于51单片机的简易倒计时器设计