基于51单片机100天倒计时数码管显示(共阴) (附加时分秒显示)

合集下载

基于51单片机的可预置分秒倒计时装置

基于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分别是该放大器的输入端和输出端。

51单片机复习题(含答案)

51单片机复习题(含答案)

一、填空题1、A T89S51单片机为8 位单片机,共有40 个引脚。

2、MCS-51系列单片机的典型芯片分别为8031 、8051 、8751 。

3、A T89S51访问片外存储器时,利用ALE 信号锁存来自P0口发出的低8位地址信号。

4、A T89S51的P3口为双功能口。

5、A T89S51内部提供 2 个可编程的16 位定时/计数器,定时器有4 种工作方式。

6、A T89S51有 2 级中断, 5 个中断源。

7、A T89S51的P2 口为高8位地址总线口。

8、设计一个以AT89C51单片机为核心的系统,如果不外扩程序存储器,使其内部4KB闪烁程序存储器有效,则其EA* 引脚应该接+5V9、单片机系统中使用的键盘分为独立式键盘和行列式键盘,其中行列式键盘的按键识别方法有扫描法和线反转法。

10、单片机进行串行通信时,晶振频率最好选择11.0592MHz11、AT89S51复位后,PC与SP的值为分别为0000H 和07H 。

12、关于定时器,若振荡频率为12MHz,在方式2下最大定时时间为256us13、A T89S51单片机的通讯接口有串行和并行两种形式。

在串行通讯中,发送时要把并行数据转换成串行数据。

接收时又需把串行数据转换成并行数据。

14、一个机器周期等于6个状态周期,振荡脉冲2分频后产生的时序信号的周期定义为状态12周期。

15、当使用慢速外设时,最佳的传输方式是中断。

16、MCS-51串行接口有4种工作方式,这可在初始化程序中用软件填写特殊功能寄存器__SCON _加以选择。

二、判断题1、8031与8051的区别在于内部是否有程序存储器。

(√)2、内部RAM的位寻址区,既能位寻址,又可字节寻址。

(√)3、串行口工作方式1的波特率是固定的,为fosc/32。

(×)4、8051单片机中的PC是不可寻址的。

(√)5、MCS-51系统可以没有复位电路。

(×)6、某特殊功能寄存器的字节地址为80H,它即能字节寻址,也能位寻址。

基于AT89C51单片机的倒计时

基于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单片机键盘数码管显示(带程序)

51单片机键盘数码管显示(带程序)

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。

它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。

A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。

(完整word版)基于51单片机多功能电子时钟报告

(完整word版)基于51单片机多功能电子时钟报告

单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目—-—-———--—--—-—--------—-——---—- 3二电路设计--------——-——---—--——---——--————-——--—- 4三程序总体设计思路概述——-------———-——--——5四各模块程序设计及流程图——--—---------——6五程序及程序说明见附录-—-——————-—-—---—-- **六课程设计心得及体会-----————-————--——--—- 11七参考资料—-—-—---—--———-———--————-—-----—----—-—12一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。

具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能: (1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示.最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能—-——及格(2)完成“校时修改”功能---—中等(3)完成“校时修改位闪"---—良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3。

7口。

基于51单片机实现LED数码管静态与动态显示的设计浅析

基于51单片机实现LED数码管静态与动态显示的设计浅析

33第2卷 第22期产业科技创新 2020,2(22):33~34Industrial Technology Innovation 基于51单片机实现LED数码管静态与动态显示的设计浅析龙 志(广州大学松田学院,广州 增城 511370)摘要:随着社会的发展,在我们日常的生活中,数码管的应用随处可见,尤其是在电子应用设计显示等方面常常发挥着非常重要的作用,因此研究数码管的显示有非常重要的现实意义。

数码管我们可以分为静态显示和动态显示,这两种显示有着本质的区别,静态显示的特点是占用CPU 时间少,显示便于监测和控制,显示字形稳定,而动态数码管的显示,效果相对静态显示亮度差少许,但成本较低。

本设计主要是基于51单片机,先通过结合集成芯片74HC573对LED 数码管静态显示的硬件电路设计与分析,进一步拓展到采用芯片74HC138与LED 数码管动态显示的硬件电路设计与分析,最终实现两种不同的电路设计显示的方法。

关键词:LED 数码管;静态显示;动态显示;51单片机中图分类号:TP368.12 文献标识码:A 文章编号:2096-6164(2020)22-0033-02随着电子应用技术的不断发展,显示电路在电子设计应用方面更加广泛,尤其是LED 数码管显示在各行各业中的应用更加重要,如红绿交通灯显示,电子时钟显示,家电产品功能显示等方面都需要用到LED 数码管作为显示。

因此,对LED 数码管的显示控制有着非常重要的现实意义。

因此我们要实现LED 数码管的熟练显示控制,我们必须要根据数码管的特点来进行分析和设计,数码管有静态显示和动态显示的两种方法,接下对这两种电路作详细的分析与设计,最终实现对LED 数码管静态与动态的两种不同显示设计方法。

1 数码管静态显示电路设计数码管静态显示设计是利用MCS-51单片机结合两片集成芯片74HC573,实现对4个LED 数码管的显示控制。

具体设计如图1所示:图1 数码管静态显示设计电路图本电路设计主要是利用单片机的P0口来实现对数码管的位选控制与段选的控制,P0口之所以能够正确的对数码管进行位选与段选的控制,关键是在于设计中使用了芯片74HC573。

基于某51单片机能实现任意时间倒计时。

基于某51单片机能实现任意时间倒计时。

倒计时器只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。

比如30分钟倒计时修改分钟十位和各位即可。

七士基丫JTV•” V r z 1 严U" 口I 4 -|Fj-AUi JMO40H, =JOOH,0. IS位查表码MOV41H, GOOH;秒钟个位位杏表码MO42H,;秒钟十位住杳表码vov43H t GOOH;分钟个住位査表码MO44H,;分钟十位位查表码MO45H, #00H,状态显示管查表码MO46H, tiO2H;定时器定时次数设计要求:由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED显示模块显示剩余时间,显示格式为XX (分):XX (秒).X,精确到0.1s的整数倍。

倒计时到,由蜂鸣器发出报警。

绘制系统硬件接线图,并进行系统仿真和实验。

画出程序流程图并编写程序实现系统功能。

设计的作用目的:此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。

通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。

本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。

本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。

三、具体设计:1•问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。

51单片机定时器数码管60秒倒计时

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--); }。

基于51单片机100天倒计时数码管显示(共阴) (附加时分秒显示)

基于51单片机100天倒计时数码管显示(共阴)             (附加时分秒显示)

基于51单片机100天倒计时数码管显示(共阴)(附加时分秒显示)#include <reg51.h>unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j,a1,a2,a3,a4,b1,b2;void delay(unsigned char i);signed int time1=100,time0=59,time3=59,time4=23;void sm();void time2();void hms1 ();void timej ();void timez ();sbit ks=P1^4;sbit hms=P1^5;sbit add=P1^6;sbit bat=P1^7;void sm() //100天数码管显示{e3=time1/100;f3=time1%100/10;g3=time1%100%10;P2=0x00;P0=s[e3];delay(2);P2=0x01;P0=s[f3];delay(2);P2=0x02;P0=s[g3];delay(2);a1=time4%60/10; //时显示a2=time4%60%10;a3=time3%60/10; //分显示a4=time3%60%10;P2=0x03;P0=s[a1];delay(2);P2=0x04;delay(2);P2=0x05;P0=s[a3];delay(2);P2=0x06;P0=s[a4];delay(2);b1=time0%60/10; 秒显示b2=time0%60%10;P2=0x07;P0=s[b1];delay(2);P2=0x08;P0=s[b2];delay(2);}void main(){TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;while(1){sm();time2();hms1();timej();timez();}}void time2() //计时开始{if(ks==0){delay(10);}if(ks==0){flag0=1;}if(flag0==1&&ks==1)TR0=1;}}void hms1 () //按键变量j {if (hms==0){delay (10);}if(hms==0){flag2=1;}if(flag2==1&&hms==1){ flag2=0;j++;TR0=0;if (j==3) j=0;}}void timez () //分按键减{if (add==0){delay (10);}if(add==0){flag4=1;}if(flag4==1&&add==1){flag4=0;switch(j){case 0x00:break;case 0x01:time3--; break;case 0x02:time3=time3-10;break; default:break;}}}void timej () //时按键减{if (bat==0){delay (10);}if(bat==0){flag3=1;}if(flag3==1&&bat==1){flag3=0;switch(j){case 0x00:break;case 0x01:time4--;break;case 0x02:time4=time4-10;break;default:break;}}}void int1()interrupt 1{count++;if(count==16){count=0;time0--;}if(time0==-1) // 如果秒到了0等于59{time0=59;time3--; //分自减}if(time3==-1){time3=59;time4--; //时自减}if(time4==-1){time4=23;12点过后time1--;//100天减}if(time1==-1){time1=100;//到达100天恢复}}void delay(unsigned char i ){unsigned char j,k;for (k=0;k<i;k++)for (j=0;j<10;j++);}。

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

51单片机100天倒计时牌完整程序

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;}。

基于单片机LED数码管共阴极显示电路课程设计

基于单片机LED数码管共阴极显示电路课程设计

物理与电子工程学院《单片机原理与接口技术》课程设计报告书设计题目:基于单片机LED数码管共阴极显示电路专业:自动化班级: 14级接本班学生姓名:李超学号: 2010140343108指导教师:成燕平2014年6月9日物理与电子工程学院课程设计任务书专业:自动化班级: 14级接本1班随着计算机技术的发展,现代的计算机都是大规模集成电路计算机它们具有功能强、结构紧凑、系统可靠等特点,其发展趋势是巨型化、微型化、网络化及智能化。

微型化是计算机发展的重要方向,也就是把计算机的运算器、控制器、存储器、I/O接口四个组成部分集成在一个硅片内,于是就出现了一个以大规模集成电路为主要组成的微型计算机即单片机(Single Chip Microcomputer)。

正是由于单片机技术的发展,才能使LED七段数码管能够在减少驱动器的情况下能够直接被驱动。

由于LED数码管显示技术的优势使得它被广泛应用在工业过程控制系统、智能仪表,智能产品等领域。

本论文重点介绍了LED(light emission diode)数码管显示技术,并且编写了这种显示技术在单片机中实现的关键编码以及提供了参考原理简图。

关键词:LED技术;计算机硬件;单片机;数码管1 引言 (1)2 设计的目的 (2)3 电路的设计与分析 (2)3.1电路的总体设计 (2)3. 2数码管的工作原理 (3)3.3电路的原理框图 (5)3.4计数电路的分析与设计 (6)4 译码显示电路的设计与分析 (7)4 .1译码电路的设计 (7)4.2译码电路的分析 (8)5调试及运行结果分析 (9)5.1调试及运行 (9)5.2结果分析 (9)5.3总电路仿真 (10)6心得体会 (11)参考文献 (12)附录 (13)1 引言用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。

静态显示数据稳定,占用很少的CPU时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机100天倒计时数码管显示
(共阴)
(附加时分秒显示)
#include <reg51.h>
unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j,a1,a2,a3,a4,b1,b2;
void delay(unsigned char i);
signed int time1=100,time0=59,time3=59,time4=23;
void sm();
void time2();
void hms1 ();
void timej ();
void timez ();
sbit ks=P1^4;
sbit hms=P1^5;
sbit add=P1^6;
sbit bat=P1^7;
void sm() //100天数码管显示
{
e3=time1/100;
f3=time1%100/10;
g3=time1%100%10;
P2=0x00;
P0=s[e3];
delay(2);
P2=0x01;
P0=s[f3];
delay(2);
P2=0x02;
P0=s[g3];
delay(2);
a1=time4%60/10; //时显示
a2=time4%60%10;
a3=time3%60/10; //分显示
a4=time3%60%10;
P2=0x03;
P0=s[a1];
delay(2);
P2=0x04;
delay(2);
P2=0x05;
P0=s[a3];
delay(2);
P2=0x06;
P0=s[a4];
delay(2);
b1=time0%60/10; 秒显示b2=time0%60%10;
P2=0x07;
P0=s[b1];
delay(2);
P2=0x08;
P0=s[b2];
delay(2);
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
while(1)
{
sm();
time2();
hms1();
timej();
timez();
}
}
void time2() //计时开始{
if(ks==0)
{delay(10);}
if(ks==0)
{flag0=1;}
if(flag0==1&&ks==1)
TR0=1;
}
}
void hms1 () //按键变量j {
if (hms==0)
{delay (10);}
if(hms==0)
{flag2=1;}
if(flag2==1&&hms==1)
{ flag2=0;
j++;
TR0=0;
if (j==3) j=0;
}
}
void timez () //分按键减{
if (add==0)
{delay (10);}
if(add==0)
{flag4=1;}
if(flag4==1&&add==1)
{flag4=0;
switch(j)
{
case 0x00:break;
case 0x01:time3--; break;
case 0x02:time3=time3-10;break; default:break;
}}
}
void timej () //时按键减{
if (bat==0)
{delay (10);}
if(bat==0)
{flag3=1;}
if(flag3==1&&bat==1)
{flag3=0;
switch(j)
{
case 0x00:break;
case 0x01:time4--;break;
case 0x02:time4=time4-10;break;
default:break;
}
}
}
void int1()interrupt 1
{
count++;
if(count==16)
{
count=0;
time0--;
}
if(time0==-1) // 如果秒到了0等于59
{
time0=59;
time3--; //分自减
}
if(time3==-1)
{
time3=59;
time4--; //时自减
}
if(time4==-1)
{
time4=23;12点过后
time1--;//100天减
}
if(time1==-1)
{
time1=100;//到达100天恢复
}
}
void delay(unsigned char i )
{
unsigned char j,k;
for (k=0;k<i;k++)
for (j=0;j<10;j++);
}。

相关文档
最新文档