最长99s倒计时_99s倒计时器课程设计

2020-02-28 其他范文 下载本文

最长99s倒计时由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“99s倒计时器课程设计”。

09光信息科学与技术专业1班 单片机课程设计

杨兆永

3109008897

单片机课程设计

一、本设计任务及完成的功能

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接晶振

09光信息科学与技术专业1班 单片机课程设计

杨兆永

3109008897 其中那排阻是驱动电路。

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[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f};//编码定义 uchar numt0,num;void delayms(uint);void text(uchar);

void display(uchar numdis)//动态数码管显示子函数 {

09光信息科学与技术专业1班 单片机课程设计

杨兆永

3109008897

text(key);

while(temp!=0x0f)//判断按键是否释放

{

temp=P1;

temp=temp&0x0f;

}

} } P1=0xdf;//第2行

temp=P1;

temp=temp&0x0f;

if(temp!=0x0f)

{

delayms(10);

if(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xdb:

key=4;

break;

case 0xdd:

key=5;

break;

case 0xde:

key=6;

break;

}

text(key);

while(temp!=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

} } P1=0xbf;//第3行

temp=P1;

temp=temp&0x0f;

if(temp!=0x0f)

{

09光信息科学与技术专业1班 单片机课程设计

杨兆永

3109008897

break;

}

text(key);

while(temp!=0x0f)

{

temp=P1;

temp=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){

} case 1: bb=key;key=20;display(bb);break;//第1次按下数字键

case 2: bb=bb*10+key;n=0;key=20;display(bb);break;//第2次按下数字键 case 3: { num=bb;//*和#被按下,开始倒计时

while(s==1){

}

TR0=1;//启动定时器0中断

if(numt0==20)//如果到了20次,说明1秒时间到 {

numt0=0;//然后把numt0清0重新再计20次 num--;//num自减

if(num==0)//如果num等0

TR0=0;//关闭定时器0中断 s=0;//推出循环

led=0;//点亮LED灯

{

} } display(num);//显示num

} break;

09光信息科学与技术专业1班 单片机课程设计

杨兆永

3109008897 帮忙,不知为什么,就是修改不好,不是改得更差了,就是改好了这个功能同时别的功能不行了。唉!我快要崩溃了,期末考试就来了,本来想早点弄好它,以便专心去复习,可看是简单就偏偏弄不出来。不管了,先复习、准备考试去了。

几天后,我连了一个新的一样的原理图(我以前做模电、数电课程设计的时候,一样的电路图,第一次连好后,检查确实没问题但运行不了,重新连一个就有可能运行),希望这次能成功。连好图后,程序也重新写,运行,随较上个图的改善了很多,但还是不行。没方法,只能找错误、修改,又花了几个钟,终于弄好了。问题出现在对矩阵扫描后的结果进行处理那里。好激动啊!

通过这次课程设计,不但加深我单片机的知识,更是让我再一次明白,不要小看那些看似简单的事,只有自己真正动手去做了,并把它做成功了,那才能说明自己真正的懂了。

《最长99s倒计时.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
最长99s倒计时
点击下载文档
相关专题 99s倒计时器课程设计 倒计时 最长 99s倒计时器课程设计 倒计时 最长
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文