您好,欢迎来到花图问答。
搜索
您的当前位置:首页单片机设计倒计时器

单片机设计倒计时器

来源:花图问答


单片机课程设计实验

实验课程题目:倒计时器

班级:

姓名:

学号:

一、 实验目的:

学习JD51单片机定时器时间计时处理、按键扫描及LED数码管显示的设计方法。

二、 设计要求:

设计一个倒计时器,用数码管显示剩余时间,通电后显示初始值10.00表示设定初始值为10分钟,按开始/取消按钮(K4开关键)开始倒计时,再次按开始/取消按钮(K4开关键)则复位到10.00;复位后可按时间调整按钮(K1与K2开关键)调整倒计时的初始时间,当数码管显示00.00时蜂鸣响6声。

三、程序设计:

#include

#define uchar unsigned char

#define uint unsigned int

uchar Count = 0;

uint fs=0;

sbit BELL = P2^4; //设置P2.4口,为控制蜂鸣器发声的引脚

sbit K1 = P3^2;

sbit K2 = P3^3;

sbit K3 = P3^5;

uchar min = 10 ;

uchar sec = 0 ;

uchar ws[4] = {0x01,0x02,0x04,0x08};

uchar table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管的段码编码 (0-9)

uchar table_d[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带点数码管的段码编码 (0-9)

void delay(void) //误差 0us

{

unsigned char a,b;

for(b=1;b>0;b--)

for(a=7;a>0;a--);

}

void Delay(uint del) { uint x,j;

for(j=0;jfor(x=0;x<=148;x++);

}

void Delay2(uint m)

// 延时子程序,延时时间为 1ms * del

{

while(--m);

}

void beep(uint n) {

uint i;

for(i=0;i{

BELL=0;

Delay2(10000);

BELL=1;

Delay2(10000);

}

//蜂鸣器响N次

}

void Time0_Init() //初始化定时器 11.0592M 50ms

{ EA = 1 ;

TMOD = 0x01;

TH0= 0x4E;

TL0=0x58;

TR0 = 0;

ET0 = 1;

}

void time0() interrupt 1 {

TH0= 0x4E;

/*定时器0中断程序*/

TL0=0x58;

if (Count == 20)

{

Count = 0;

if(sec == 0)

{

if(min == 0)

{

min = 10;

}

else min--;

sec = 59;

}

else sec--;

}

else Count++;

if(min==0&&sec==0) {

beep(3);

min=0;

sec=0;TR0=0;

}

}

void display(void) {

P2 = 0xfe;

/*调用蜂鸣器程序*/

//数码管每位动态显示

P0 = table[min/10];

Delay(2);

P2 = 0xfd;

P0 = table_d[min%10];

Delay(2);

P2 = 0xfb;

P0 = table[sec/10];

Delay(2);

P2 = 0xf7;

P0 = table[sec%10];

Delay(2);

P2=0xf0;

delay();

}

void key1() //按键功能函数

{

if(K1==0||K2==0||K3==0) //判断是否有按键按下

{ display(); /*调用显示函数*/

if(K3==0)

{

if(K3==0)

{

if(fs==0) /*如果K3按下判定如果fs为0,开始计时*/

{

TR0 = 1;

}

else /*如果fs为1,计时器复位*/

{

min=10;

sec=0;

TR0=0;

}

while(!K3) ; /*按键消抖,每按一次只执行一次*/

Delay(10);

while(!K3) ;

fs=(!fs);

}

}

else if (K1==0) /*按键K1判定函数*/

{

if(K1==0)

{

if(TR0!=1)

{ min++;

if(min==100)

{

min=0;

}

while(!K1); delay();

while(!K1);

}

/*按键K1消抖*/

}

}

else { display(); if(K2==0)

{

if(TR0!=1)

{ min--;

}

if(min==-1)

{

min=99;

}

/*按键K2判定函数*/

/*调用显示函数*/

while(!K2); /*按键K2消抖*/

delay();

while(!K2);

}

}

}

}

void main() { BELL = 1;

Time0_Init();

while(1)

{

display();

//主函数

key1();

if(K3==0)

{

key1();

}

}

}

三、 经验和体会

在这次的单片机程序课程设计中,学到了关于单片机的很多东西。单片机本就是计算机的一种,对其内部结构的学习同时也让我了解到一些计算机的工作机理。单片机具有软硬结合,体积小,可以很容易嵌入到各种应用系统中,单片机为核心的嵌入式控制系统在工业检测与控制、仪器仪表、消费类电子产品、通信、武器装备、各种终端及计算机外部设备、汽车电子设备和分布式多机系统领域中得到了广泛了应用。单片机是我们的这个专业中很重要的一门课程,同时也是一门比较难学的课程,刚开始学习单片机的时候,觉得很难,在自己的摸索中慢慢的有点懂了。其实单片机主要是难在写程序和写代码,程序主要是用C语言编程,有时候脑子里没有一点思绪,什么都想不出来,所以,如果想要把单片机学好的话,首先就要把C语言学好,单片机主要是建立在C语言的基础上的,不过单片机也可以用汇编语言编译。虽然我们的单片机课程结束了,我们的课程设计也顺利地做

完了,但是我对学单片机的热情只增不减,还是想要更深一步的去了解单片机。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务