基于51单片机数码管100天倒计时程序
基于51单片机的可预置分秒倒计时装置

1.设计方法本次课程设计的题目是设计并实现可编程倒计时装置。
具体要求是按秒倒计时并键盘预置分、秒各两位数,键控启动计时,数码管显示倒计时;计时器归零时输出一音频信号。
根据实验要求选用AT89C52单片机作为最基本的部件,包括数码管部分,蜂鸣器部分,矩阵键盘部分等几大模块,以下依次进行介绍。
1.1 硬件简介(1)AT89C52AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
引脚图如下:图一PDIP封装的AT89C52引脚图该单片机的功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)为供电端口,接+5V电源的一端,GND(20脚)为接地端,接地。
P0~P3为可编程通用I/O 脚,在本设计中,P0端口(32~39 脚)被定义为数码管数据输入端口,分别与数码管的相应功能管脚相连接。
P2端口外接一个74LS373对控制信号进行锁存,然后从P2口的低四位输出到数码管的片选端,进行对四位数码管的选择。
P3口中的P3.0接蜂鸣器的使能端,控制蜂鸣器的选通。
(2)时钟振荡器AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
基于C51单片机控制的数码管秒表

}
/*如果显示亮度不够可以改一下延时*/
//后面我会发设计报告
{
case 0:
s1();
break;
case 1:
timer0_init();
s2();
break;
case 2:
TR0=0;
s2();
break;
}
}
}
/*******************************************************************************
void s1()
{
for(j=0;j<8;j++)
{
if(j==2||j==5)
{
chose7s(j);//使能某位数码管
DATA=0x40;
delay_ms(2);
}
else
{
chose7s(j);
DATA=0x3f;
delay_ms(2);
}
}
}
void s2()
{// timer0_init();
break;
}
hc138s_enable = DISABLE;
}
/*******************************************************************************
51单片机输入数字并数码管倒计时典型C语言代码

51单片机输入数字并数码管倒计时典型C语言代码使用STC89C52RC单片机,外接数码管、蜂鸣器。
改代码非常适合初学者学习借鉴。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit dula=P0^0;sbit wela=P0^1;sbit p17=P0^3;sbit p02=P0^2;sbit p32=P3^2;sbit p04=P0^4;uchar count;uint Sumnum;uint circle,circle1;uint time;float top;//定义top为浮点型变量uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar temp,count;uint bian,num,e,d,c,b,a;void delay(uchar x){uchar a1,b1;for(a1=x;a1>0;a1--)for(b1=200;b1>0;b1--);}void chaishu(uint sum1){uint e1,b1,c1,d1;e=sum1/10000;////e=6*e1=sum1%10000;///e1=5535d=e1/1000;///////d=5*d1=e1%1000;//////d1=535c=d1/100;////////c=5*c1=d1%100;///////c1=35b=c1/10;/////////b=3*b1=c1%10;////////b1=5a=b1;////////////a=5*}void display(uint wan,uint qian,uint bai,uint shi,uint ge) {wela=1;P2=0xfe;wela=0;P2=0xff;dula=1;P2=table[wan];dula=0;delay(3);P2=0xff;wela=1;P2=0xfd;wela=0;P2=0xff;dula=1;P2=table[qian];dula=0;delay(3);P2=0xff;wela=1;P2=0xfb;wela=0;P2=0xff;dula=1;P2=table[bai];dula=0;delay(3);P2=0xff;wela=1;P2=0xf7;wela=0;P2=0xff;dula=1;P2=table[shi];dula=0;delay(3);P2=0xff;wela=1;P2=0xef;wela=0;P2=0xff;dula=1;P2=table[ge];dula=0;delay(3);P2=0xff;}///////////////////////////////////////switchvoid suanbian(uchar cont){switch (cont)//松开按键后对bian进行赋值{case 1:{bian=num;break;//跳出switch}case 2:{bian=(bian*10)+num;break;//跳出switch}case 3:{bian=(bian*10)+num;break;//跳出switch}case 4:{bian=(bian*10)+num;break;//跳出switch}case 5:{bian=(bian*10)+num;break;//跳出switch}}//switch结束}///////////////////////////////////switchvoid keyscan(){////////////////////////////////////////////////////////////////////////////////////////////////////以下测456P1=0xfd;//P1口等于11111101temp=P1;//temp等于P1口的值if(P1!=0xfd)//如果P1口不等于11111101{delay(100);//延时100毫秒if(P1!=0xfd)//再测一下如果P1口是否等于11111101{switch(temp)//如果不等于,那么检测temp取到的P1口的值并进入选择。
倒计时60秒程序(单片机C51)

倒计时60秒程序(单片机C51)#include#define uint unsigned int#define uchar unsigned charuchar code table[]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit gew=P2^1;sbit shiw=P2^0;sbit k2=P1^0;uchar num,num1=60,num2,shi,ge;void Init(){TMOD=0X01; TH0=(65536-50000)%256; TL0=(65536-50000)%256;EA=1;ET0=1; TR0=1;}void delay(uint xms) //延时子函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void scankey() //键盘检测子函数{if(k2==0) //检测键是否被按下{delay(5); //延时消除抖动if(k2==0) //重新读取k2的值{num2++; //num2为按次数标志位while(!k2); //等待按键释放if(num2==1) //按键一次计时停止TR0=0;if(num2==2) //按键两次计时开始{TR0=1;}}}}void main() //主函数{Init(); //初始化子函数调用while(1){scankey(); //不断键盘扫描gew=0; //打开数码管个位位选P0=table[ge]; //数码管个位赋值delay(1); //延时送入数据的反应时间gew=1; //关闭数码管个位位选delay(1);shiw=0; //打开数码管十位位选P0=table[shi]; //送入数据delay(1);shiw=1; //关闭数码管十位位选delay(1);}}void Timer0() interrupt 1{TH0=(65536-50000)/256; //定时器重装初值TL0=(65536-50000)%256;num++;if(num==20) //定时器每进行一个周期num加1,运行20个周期即为1s{num=0; //到1秒,num清0重新开始num1--; //倒计时1秒if(num1==0)num1=60;shi=num1%10; //两位数分离赋给数码管十位显示ge=num1%10; //两位数分离赋给数码管个位显示}}。
基于C51的倒计时器设计

广州理工学院《单片机原理与应用》课程设计报告设计课题:基于C51的倒计时器设计学院:电气与电子工程学院班级:姓名:学号:指导教师:日期:2020.11.6---2020.11.19评分:摘要本系统采用STC89C52单片机,设计一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数字,4位数码管显示计时数字,可选择倒计时范围在(1-9999),设定时间后,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
关键词:STC89C52;数码管显示;可控倒计时器A B S T R AC TS TC89C52m i c ro c on t rol l er i s ap pl i e d i n t hi s s ys t e m, de s i gn ana d j u s t ab l e t i m e r, t h ec ou nt do wn t i m er n um b er c a n f r e el y t h r ou gh t h eb ut t o ns t o a dd KEY1/m i n us K E Y2N u m b e rs, t h e fo ur d i gi t a l t u b e d i s pl a y t i m i n g Nu m b e r s,c an ch oo s e t he c o unt do w n r a n ge i n (1-9999), s e t t i n g t i m e,p r ess t h e b ut t on K EY3s t ar t t h e c ou nt do wn,wh e n t h e c o un td ow n t o z er o, b uz ze r t o re c e i v e si gn al s, s e nd s out t he a l a r m.K E Y W O R DSSTC89C52; Digital tube display; Controlled countdown timer目录概述 (1)一、方案设计 (2)1.1设计任务及其要求 (2)1.2器材选定 (2)二、硬件设计 (3)2.1复位电路 (3)2.2按键电路 (3)2.3时钟振荡电路 (4)2.4单片机最小系统模块电路 (4)三、软件设计 (5)3.1程序流程图 (5)3.2设置数值加减程序 (6)3.3设置倒计时程序 (6)3.4设置蜂鸣器程序 (7)3.5总程序 (7)四、调试与实现 (11)4.1实物连线 (12)4.2连线步骤 (13)4.3模块测试 (14)4.4功能实现 (14)五、课程设计体会与总结 (15)5.1总结 (15)参考文献 (15)附录 (16)附录表1 倒计时器元件清单 (16)概述本项目是由单片机通过执行设定设定的程序,设计的一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数值,由4位数码管显示计时数值,选择在(1-9999)的倒计时范围内,设定时间,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
基于AT89C51单片机的倒计时

单片机课程设计题目:基于AT89C51单片机的倒计时学院:机械与电气工程学院专业:电气工程及其自动化学号:101401010205目录1、设计要求 (3)2. 工作原理 (3)2.1硬件设计 (4)2.1.1 单片机AT89S51 (4)2.1.2 显示器件选择 (5)2.1.3复位电路 (7)2.1.4 时钟电路 (7)2.1.6 蜂鸣器 (9)3、软件设计 (10)3.1 按键流程图: (10)3.2 定时器流程图: (11)3.3蜂鸣器发出音乐流程图: (12)3.4主程序流程图: (13)4、电路仿真 (14)参考文献 (15)附录1 电路图 (16)附录2 程序 (16)附录3 元件清单 (21)1、设计要求利用AT89C51单片机结合LED显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,红色LED灯闪烁,通知倒计数终了,该做应当做的事。
定时闹钟的基本功能如下。
●显示格式为“分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵利用AT89C51单片机结合LED显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,红色LED灯闪烁,通知倒计数终了,该做应当做的事。
音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。
●K1—可调整倒计数的时间1~60分钟。
●K2—设置倒计数的时间为5分钟,显示“0500”。
●K3—设置倒计数的时间为10分钟,显示“1000”。
●K4—设置倒计数的时间为20分钟,显示“2000”。
按K1键则在LED上显示出设置画面。
此时,若:a. 按操作键K2—增加倒计数的时间1分钟。
b. 按操作键K3—减少倒计数的时间1分钟。
c. 按操作键K4—设置完成。
附加功能:K5—计数开始按钮。
毕业设计(论文)基于51单片机的9999秒倒计时器设计[管理资料]
![毕业设计(论文)基于51单片机的9999秒倒计时器设计[管理资料]](https://img.taocdn.com/s3/m/7932f308941ea76e59fa04be.png)
郑州科技学院专科毕业设计(论文)题目_基于51单片机的9999秒倒计时器设计学生姓名陈利丹专业班级 10计通学号 201019009所在系信息工程学院指导教师邢烥岩完成时间 2013 年3月 5 日目录一引言 (3)二.总体设计方案 (4): (4)三、硬件设计 (5) (5)89C52单片机 (5)四.复位电路工作原理 (8) (8) (9)五.数码管显示电路 (11)显示电路 (11)LED数码显示器的介绍与结构 (12) (12)七.软件设计 (17)程序设计 (18)原理图 (25)PCB图 (26)元件清单 (27)八.结束语 (28) (29)基于51单片机的9999秒倒计时器设计信息工程学院通信技术陈利丹(201019009)指导老师:邢烥岩摘要倒计时器应用十分广泛,在制作倒计时器时多采用纯数字电路和模拟电路,电路复杂功能单一。
如今微控技术应用十分广泛,采用单片机控制器制作倒计时器电路十分简单,功能齐全并且可以扩展其它功能。
气短数码显示电路采用直接与单片机接口连接方式更加节省电路。
成本低、功能灵活、使用方便等优势,更加巩固了单片机技术在电子产品制作中的不可替代的作用。
本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。
倒计时系统需要用到锁存器、LED 数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。
对于倒计时器中的LED数码显示器来说,采用以软件为主的接口方法,即采用Keil uVision4软件程序进行译码。
【关键词】倒计时器单片机矩阵键盘 Keil uVision3 LED数码显示器9999 seconds countdown timerdesign based on 51 single chip microcomputer Name:Chen Lidan No. :201019009 Teacher: Xing Chenyan (Institute of information engineering network technology)Countdown timer is widely used, the pure digital circuit and analog circuit in the countdown timer, complex functions of a single circuit. Now micro control technology is widely used, using single chip microcomputer controller making countdown timer circuit is very simple, complete functions and can be extended to other functions. Shortness of breath and digital display circuit is directly connected with the microcontroller interface mode more saving circuit. Low cost, flexible functions, convenient use and other advantages, consolidate the single-chip technology plays an irreplaceable role in the production of electronic productsIn this paper, aiming at the requirement of the countdown system design, introduces the basic principle of MCS-51 SCM, such as interface function, 51 SCM interrupt, timer and so on. The countdown system needs to use latch, LED digital display module, through interaction between different modules, complete the countdown to the initial hardware. For LED digital display timer in the interface, the method based on software, which uses Keil uVision4 software decoding.[keyword] countdown timer Singlechip keyboard matrix Keil uVision3 LED digital display一.引言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
C51倒计时程序设计

C51倒计时程序设计一、总体设计方案总体方案设计:用51单片机控制C语言编写设计时、分、秒计时器,8位数码管显示功能,显示格式:“时-分-秒”;总体设计构思:由C语言编写51单片机控制的时、分、秒计时器首先需要设计好硬件电路,根据电路要求编写程序:步骤:(1)采用定时器控制,精确计时,实现时、分、秒的功能;(2)用八位数码管(共阳)显示;(3)编写程序(设初值为23时59分59秒),用Proteus设计仿真电路验证!程序设计:(1)主函数:初始化中断,循环调用显示等待中断;程序模块:T0中断函数、数码管显示函数仿真构成:8位一体的数码管、STC89C51、排阻RP1等二、模块设计方案初始化定义◆文件包含◆常量定义◆变量定义◆数据表格定义#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};定时计数器及其中断初始化 设置定时器工作方式(TMOD)定时器赋初值(THx,TLx)开总中断(EA=1)开定时计数器中断(ETx=1)启动定时器(TRx=1)void timer0init(void){TMOD=0x01;TH0=(65536-50000)/256;/TL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0}延时函数()定时计数器中断函数 重装初值对溢出中断计数,并判断是否有20次 时间减1,并判断是减到了0显示函数✧输出秒位位码✧输出秒位段码✧输出分位位码✧输出分位段码✧输出时位位码✧输出时位段码void time0() interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;if(temp==20){temp=0;if(sec==0){if(min==0){if(hour==0){hour=23;}else hour--;min=59;}else min--;sec=59;}else sec--;}else temp++;}主函数●调用初始化函数对定时计数器进行初始化●调用显示函数显示时间仿真电路设计图片三、程序代码/*倒计时及显示程序,适用于寻迹小车实验板*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳七段编码uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1uchar hour=23,min=59,sec=59;//定义倒计时变量,当temp计数加20(20x50ms=1s)时,time减1/*--定时计数器T0及其中断初始化函数--*/void timer0init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0}/*----------延时函数---------------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=124;j>0;j--);}/*定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/void time0() interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;if(temp==20){temp=0;if(sec==0){if(min==0){if(hour==0){hour=23;}else hour--;min=59;}else min--;sec=59;}else sec--;}else temp++;}/*--------------显示函数------------*/void display(void){P1=0xfe;//输出个位的位码P0=table[sec%10]; //输出时间个位的段码delay(5); //亮5msP1=0xfd;//输出十位的位码P0=table[sec/10]; //输出时间十位的段码delay(5); //亮5msP1=0xf7;//输出个位的位码P0=table[min%10]; //输出时间个位的段码delay(5); //亮5msP1=0xfb;P0=0xbf;delay(5);P1=0xef;//输出十位的位码P0=table[min/10]; //输出时间十位的段码delay(5); //亮5msP1=0xbf;//输出个位的位码P0=table[hour%10]; //输出时间个位的段码delay(5); //亮5msP1=0xdf;P0=0xbf;delay(5);P1=0x7f;//输出十位的位码P0=table[hour/10]; //输出时间十位的段码delay(5); //亮5ms}/*----------主函数-----------------*/void main(void){timer0init();//调用初始化函数对定时计数器进行初始化while(1){display();//调用显示函数显示时间}}四、调试结果五、设计总结关于这次设计应该做一个总结,因为这次项目不是一个人做的,而是我们寝室四个人一起做的,有难度,更有配合的默契。
基于单片机的倒计时牌的设计

外部中断 1 开始 R4 是否为 0 R3 是否为 0
R3 是否为 1 秒单元加 1
秒加到 60 了吗
秒单元清 0 R3 是否为 2
分单元加 1 分加到 60 了吗 分单元清 0
R3 是否为 3 时单元加 1
时加到 24 了吗
时单元清 0 R3 是否为 4 天单元加 1 天加到 100 了吗
天单元清 0 R2+1,R2 等于 2 吗
;日历 ;切换显示 (日历和倒计时的切换 )
MOV R5,#0AH ;十次中断产生一秒
MOV R3,#00H ;利用外部中断 0 对天、时、分、秒进行切换
MOV R4,#00H ;当倒计时开始( R3=5 )时对倒计时的初值不能再进行设置
MOV 30H,#00H ;天
MOV 31H,#00H ;时
MOV 32H,#00H ;分
R3=4 设置天单元 ,R3=5,T0 开始计时。 */ ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0P
ORG 00BH
LJMP IT0P
ORG 0013H
LJMP INT1P
ORG 0100H
MAIN:
MOV TMOD,#01H
;定时器 T0 设为方式一
MOV R1,#17 MOV R2,#00H
倒计时牌
1. 方案选择
1.1 题目:倒计时牌 1.2 要求: 1.2.1 实现日历功能; 1.2.2 显示距倒计时时刻还有多长时间(显示天、时、分、秒) ; 1.2.3 倒计时的时间可人为设定; 1.3 总体设计:
本倒计时牌以 AT89C51 单片机作为核心, 最长可以倒计时 100 天。可以显示距倒计 时时刻还有多长时间, 显示格式为天 (十位,个位 )、时(十位、 个位)、分(十位、 个位)、 秒(十位、个位) ;倒计时的时间可以人为设定;另外还可以显示当前的日历,显示格 式为年(四位),月(两位),日(两位)。
本科毕业设计之基于51单片机控制的60秒倒计时系统设计

摘要最近几年来随着运算机在社会领域的渗透,单片机的应用正在不断地走向深切,同时带动着传统控制检测日新月异的更新。
由于单片机具有体积小,易于产品化、面向控制、集成度高、功能强、靠得住性高、价钱低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中取得了普遍的应用。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来利用。
可是仅单片机方面知识是不够的,还应按照具体硬件结构,和针对具体应用对象特点的软件结合,以作完善。
本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确挪用,完成了能够随时设置初值的基于51单片机控制的60秒倒计时系统。
关键词:倒计时单片机KeiluVision3 LED数码显示器目录1 MCS-51 单片机硬件结构及原理 (1)MCS-51系列单片机结构 (1)1.1.1 MCS-51单片机的大体组成 (1)1.1.2内部大体结构 (3)MCS-51单片机存储器安排 (6)1.2.1存储器空间安排 (6)1.2.2片内存储器 (6)单片机秒表课程设计的概述 (9)课程设计思路及描述 (9)课程设计任务和要求 (10)系统硬件方案设计 (11)软件方案设计 (11)生“HEX”文件的步骤 (12)源程序及注释 (15)原理图分析 (16)课程设计效果 (18)总结 (19)致谢 (20)参考文献 (21)1 MCS-51 单片机硬件结构及原理 MCS-51系列单片机结构 1.1.1 MCS-51单片机的大体组成 1 整体结构图1-1单片机的整体结构2. MCS-51单片机外部引脚及其说明最多见的封装形式是40引脚双列直插式DIP(Dual In-line Package) 尚有44引脚的无引线芯片载体封装PLCC(Plastic Leaded Chip Carrier)图1-2 MCS-51单片机外部引脚及说明其中两条电源线,两条外接晶体,4条控制或作电源复用,32条I/O 引线。
51单片机定时器数码管60秒倒计时

51单片机定时器数码管60秒倒计时#include#include"delay.h"#define DataPort P0sbit Latch1=P2^2;//段锁存sbit Latch2=P2^3;//位锁存unsigned char code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0 x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~Funsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char i=0,num=60,j=0;void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0=(65536-50000)/256; //重新赋值TL0=(65536-50000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}main()unsigned char Temp[2];Init_Timer0();while(1){Temp[0]=DuanMa[num/10]; Temp[1]=DuanMa[num%10];DataPort=WeiMa[i];Latch2=1;Latch2=0;DataPort=T emp[i];Latch1=1;Latch1=0;DelayMs(1);i++;if(i>=2){i=0;}if(num==0xff){num=60;}}void Timer0_isr(void) interrupt 1 using 1 {TH0=(65536-50000)/256; //重新赋值TL0=(65536-50000)%256;j++;if(j==20){j=0;num--;}}#includetypedef unsigned char uchar ; typedef unsigned int uint ;uchar temp,bai,shi,ge,num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};//定义数码管参数void delay(uint);//声明全局函数void display();void main(){temp=60;num=0;while(1){TMOD=0x01; //定时器0EA=1; //开总中断ET0=1;TR0 = 1; //开定时器中断display();delay(5);display();delay(5);}}void T0_time()interrupt 1 {TH0=(65536-45872)/256;TL0=(65536-45872)%256; num++;if(num==40){num=0;temp--;if(temp==0){temp=60;}}}void display() {ge = temp / 10; shi = temp % 10; P0 = table[ge];P2 = table[shi];}void delay(uint z) {uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--); }。
at89c51单片机led数字倒计时器课程设计论文__大学毕业论文设计

课题: AT89C51单片机LED数字倒计时器专业:班级:学号:姓名:指导教师:设计日期:成绩:重庆大学城市科技学院电气学院目录一、设计目的作用 (1)二、设计要求 (1)三、设计的具体实现 (1)1、设计原理 (1)(1)系统设计方案 (1)(2)功能模块 (2)(3)工作原理: (2)2、系统设计 (2)(1)显示模块 (2)(2)晶振模块 (3)(3)复位电路: (3)(4)按键模块: (4)(5)报警模块: (5)3、系统实现 (5)(1)实物图 (5)(2)分析 (6)四、总结 (6)五、附录 (7)附录1: (7)附录2: (8)附录3: (8)六、参考文献 (15)LED 数字倒计时器设计报告一、设计目的作用1、掌握51单片机最小系统的设计;2、掌握按键电路设计、LED 数码管的使用;3、掌握C51的编程方式。
二、设计要求基于AT89C51单片机的LED 数字倒计时器主要具有如下功能,具体要求如下:1、LED 数码管显示倒计时时间。
2、倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s 的报警声音。
(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出)3、通过按键可以对倒计时设定处置。
倒计时初值范围在24:00:00~00:00:60之间,设置成功后复位初始值为成功设定值。
三、设计的具体实现1、设计原理(1)系统设计方案:基于AT89C51单片机的数码管显示模块显示的倒计时器。
主要是以单片机来控制,用按键来设定倒计时初始时刻的值,数码管作为显示模块来显示剩余的时间。
此电路对于倒计时器中的LED 数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
显示模块晶振模块复位模块按键模块报警模块图1 LED数字倒计时器设计框图(2)功能模块:倒计时器的总体包括显示电路,按键电路,复位电路,晶振电路和报警电路等五个模块。
显示模块显示计数与灭灯,复位模块控制电路完成计数的直接清零,暂停/连续技术,用按键模块来设定倒计时初始时刻的值,报警模块实现定时时间到报警等功能。
51单片机倒计时源程序

51单片机倒计时源程序#include<reg52.h> //51头文件//#include<472405468.h>//51头文件#define uchar unsigned char //宏定义#define uint unsigned int //宏定义#define s0 P2^0 // 时加键#define s1 P2^1 // 分加键#define s2 P2^2 // 倒时加键//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6F #define s3 P2^3 // 倒分加键#define s4 P2^4 // 倒秒加键#define s5 P2^5 // 开始倒计时键总共6个按键uint tt1,tt0;uchar num=0;uchar biaozhi=11;uchar up;uchar z,han,jun,qiang,cishu,count,num1; //函数变量声明char shi,fen,miao,pao_miao; //定义有符号变量声明chardao_shi=23,dao_miao=59,dao_fen=59,dao_paomiao=99;sbit sky1=P1^0; //断控sbit sky2=P1^1; //位控sbit feng=P1^2; //控蜂鸣器const uchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极显示代码//****************** 函数声明 *****************************void feng_ming_qi(uchar); //报时函数void init(); //定时器的初始化(T1)void fenjie(); //函数声明void delay(uchar); //延时函数声明void dao_fenjie(); //倒计时显示函数uchar key_scan(); //按键调试函数//************************************************************void delay(uchar z) //一毫秒延时函数{uchar x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void init()//TR1初始化{TMOD=0x22; // TMOD=0x20; 开定时 1TH1=0x06; //T1 250微妙TL1=0x06; //装初值EA=1; //打开总中断TR1=1; ////初始化先打开定时器1ET1=1;feng=0;///////////////////////////////////////////////TH0=0x06; //T0 也是 250 微妙中断一次TL0=0x06; //装初值//EA=1; //打开总中断TR0=0; //初始化先关闭定时器0ET0=1; // IEIP=0x20;}/////////////////////////////////////////////////////////////////// /////////////////////////void dao_fenjie() //分解倒秒,倒分,倒时。
基于51单片机能实现任意时间倒计时。

倒计时器只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。
比如30分钟倒计时修改分钟十位和各位即可。
一、设计要求:由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。
倒计时到,由蜂鸣器发出报警。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
二、设计的作用目的:此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
三、具体设计:1.问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
51单片机100天倒计时牌完整程序

51单片机100天倒计时牌完整程序/************************************************************** *******///用于一百天之内的倒计时//可调具体定时时间/************************************************************** *******///使用12MHZ晶振,P1口输出段码P3口口作列扫描,用共阳LED数码管#include#include#define uchar unsigned char#define uint unsigned intuchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0xff};// 共阳LED段码表//涉及到减1小于0的问题,timedata[8] 使用符号数据char data timedata[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共8个//0.1.2.3.4.5分别表示秒低,秒高,分低,分高,时低,时高位,天数//////uchar data con1s=0x00; //1秒定时用?uchar n;//记录按键次数sbit led1=P0^5;sbit led2=P0^6;sbit led3=P0^7;sbit key0=P2^1; //大键盘sbit key4=P2^5; //从左到右4.3.2.1号键盘sbit key3=P2^4; //4高位加,3高位减,2低位加,1低位减sbit key2=P2^3; //sbit key1=P2^2; ////延时x毫秒void delay1ms(uint x){uint i,j;for (i=x;i>0;i--)for(j=110;j>0;j--); //延时一毫秒,j取110}/****************/// 键扫描子程序 ///****************/void keyscan(){ uint a;uint tiaojie=1;n=0;while(tiaojie){if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(5);if(key0==0){while(!key0);n=n+1; //记录按键次数//按键第二次N=1,调节天数;N=2,调节小时;N=3,调节分钟;N=4,调节秒数;//按键从左到右依次高位加减,低位加减if(n==5){n=0;tiaojie=0;}}}if(n!=0){if(n==1) //天数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]+1; if(timedata[7]>9) {timedata[7]=0;}}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]-1; if(timedata[7]<0) {timedata[7]=9;}}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[6]=timedata[6]+1; if(timedata[6]>9) {timedata[6]=0;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[6]=timedata[6]-1; if(timedata[6]<0) {timedata[6]=9;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}} //温度的第一位加1}if(n==2) //小时调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[5]=timedata[5]+1; if(timedata[5]>2) {timedata[5]=0;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[5]=timedata[5]-1; if(timedata[5]<0) {timedata[5]=2;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);if(timedata[5]==2){timedata[4]=timedata[4]+1; if(timedata[4]>3) {timedata[4]=0;}}else{timedata[4]=timedata[4]+1; if(timedata[4]>9) {timedata[4]=0;}}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[4]=timedata[4]-1;if(timedata[4]<0)if(timedata[5]==2) {timedata[4]=3;}else{timedata[4]=9;}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}} //温度的第一位加1}if(n==3) //分钟调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[3]=timedata[3]+1; if(timedata[3]>5) {timedata[3]=0;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[3]=timedata[3]-1; if(timedata[3]<0) {timedata[3]=5;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[2]=timedata[2]+1; if(timedata[2]>9) {timedata[2]=0;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[2]=timedata[2]-1; if(timedata[2]<0) {timedata[2]=9;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}} //温度的第一位加1}if(n==4) //秒数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[1]=timedata[1]+1; if(timedata[1]>5) {timedata[1]=0;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[1]=timedata[1]-1; if(timedata[1]<0) {timedata[1]=5;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[0]=timedata[0]+1; if(timedata[0]>9) {timedata[0]=0;}P1=dis_7[timedata[0]];P3=0Xfe;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[0]=timedata[0]-1; if(timedata[0]<0) {timedata[0]=9;}P1=dis_7[timedata[0]];//天数P3=0Xfe;a=110;while(a--);} //温度的第一位加1}}}EA=1;//退出调节过程,开中断}/***********///扫描程序///**********/scan(){uint a;P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);P1=dis_7[timedata[6]];P3=0Xbf;a=110;while(a--);P1=dis_7[timedata[5]];//小时数P3=0Xdf;a=110;while(a--);P1=dis_7[timedata[4]];P3=0xef;a=110;while(a--);P1=dis_7[timedata[3]];//分钟数P3=0xf7;a=110;while(a--);P1=dis_7[timedata[2]];P3=0xfb;a=110;while(a--);P1=dis_7[timedata[1]];//秒数P3=0xfd;a=110;while(a--);P1=dis_7[timedata[0]];P3=0xfe;a=110;while(a--);}/*************///初始化程序//clearmen(){TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用)TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用)TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//设置定时器工作方式,开定时器led1=0;led2=0;led3=0;delay1ms(1000);led1=1;led2=1;led3=1;timedata[0]=9;timedata[1]=5;timedata[2]=9;timedata[3]=5;timedata[4]=3;timedata[5]=2;timedata[6]=9;timedata[7]=9;}//主程序///*********/void main(){clearmen();while (1){scan();if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(200);if(key0==0){while(!key0);led1=0;//进入键盘扫描之后,三个指示灯点亮led2=0;led3=0;EA=0;P1=0x8E;/*F*/P3=0xfe; //最后一位数码管显示 0x8E,/*F*/,表示等待按键检测keyscan();}}}}/********************///1秒中断处理程序 ///*******************/void time_intt0(void) interrupt 1{ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;con1s++;if(con1s==20){con1s=0x00;timedata[0]--;led1=~led1;led2=~led2;led3=~led3;//正常倒计时三个指示灯每隔1秒钟点亮if(timedata[0]<0){timedata[0]=9;timedata[1]--;if(timedata[1]<0){timedata[1]=5;timedata[2]--;if(timedata[2]<0){timedata[2]=9;timedata[3]--;if(timedata[3]<0){timedata[3]=5;timedata[4]--;if(timedata[4]<0){timedata[4]=9;timedata[5]--;}if(timedata[5]<0 ) {timedata[5]=2; timedata[4]=3; timedata[6]--;if(timedata[6]<0 ) {timedata[6]=9; timedata[7]--;if(timedata[7]<0 ) {timedata[7]=9; }}}}}}}}ET0=1;}。
基于AT89C51单片机的LED数字倒计时器设计

课题:基于AT89C51单片机的LED数字倒计时器设计专业:电工程及其自动化班级:2013 级4班学号:姓名:设计日期:2015年6月6日——2015年6月19日成绩:AT89C51单片机LED数字倒计时器设计报告一、设计目的作用1、掌握51单片机最小系统的设计;2、掌握按键电路设计、LED数码管的使用;3、掌握C51的编程方式。
4、培养我们的团结合作能力。
5、锻炼我们的动手实践能力。
二、设计要求基于AT89C51单片机的LED数字倒计时器主要具有如下功能,具体要求如下:(1)LED数码管显示倒计时时间。
(2)倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s的报警声音。
(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出)(3)通过按键可以对倒计时设定处置。
倒计时初值范围在24:00:00~00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。
三、设计的具体实现1、设计原理(1)LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图1.1)。
图1.1 LED数字倒计时器系统设计框图(2)手绘草图2、系统设计(1)晶振电路的分析a.晶振电路原理:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。
当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。
整形电路再将正弦波变成方波送到数字电路中供其使用。
b.晶振电路的特点:晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。
它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。
第32节:数码管中的倒计时程序

{
case 1: //显示窗口1的数据
if(ucWd1Update==1) //窗口1要全部更新显示
{
sbit dig_hc595_st_dr=P2^1;
sbit dig_hc595_ds_dr=P2^2;
sbit hc595_sh_dr=P2^3; //LED灯的74HC595程序
sbit hc595_st_dr=P2^4;
sbit hc595_ds_dr=P2^5;
第三十二节:数码管中的倒计时程序。
开场白:
上一节讲了一二级菜单的综合程序,这一节要教会大家三个知识点:
第一个:通过本程序,继续加深理解按键与数码管的关联方法。
第二个:复习一下我在第五节教给大家的时间校正法。
第三个:继续加深熟悉鸿哥首次提出的“一二级菜单显示理论”:凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,每个显示的窗口中又可以分成不同的局部显示。其中窗口就是一级菜单,用ucWd变量表示。局部就是二级菜单,用ucPart来表示。不同的窗口,会有不同的更新显示变量ucWdXUpdate来对应,表示整屏全部更新显示。不同的局部,也会有不同的更新显示变量ucWdXPartYUpdate来对应,表示局部更新显示。
0x7d, //6 序号6
0x07, //7 序号7
0x7f, //8 序号8
0x6f, //9 序号9
0x00, //无 序号10
0x40, //- 序号11
0x73, //P 序号12
};
ucWd1Update=0; //及时清零标志,避免一直进来扫描