文档库 最新最全的文档下载
当前位置:文档库 › 数码管时钟显示程序

数码管时钟显示程序

数码管时钟显示程序
数码管时钟显示程序

数码管时钟显示程序

源程序如下

#include

#define uint unsigned int

#define uchar unsigned char

sbit wei=P2^3;//声明U1锁存器的锁存端

sbit duan=P2^2;//声明U1锁存器的锁存端

uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*延时函数程序delay_ms*/

void delay_ms(uint z)

{

uint a,b;

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

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

}

uchar num,num1,num2,num3;

/* 主函数*/

void main()

{

num1=23;

num2=18;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

duan=1;

P0=table1[num3%10];

duan=0;

wei=1;

P0=0x7f;

wei=0;

delay_ms(2);

duan=1;

P0=table1[num3/10];

duan=0;

wei=1;

P0=0xbf;

wei=0;

delay_ms(2);

duan=1;

P0=0x40;

duan=0;

wei=1;

P0=0xdf;

wei=0;

delay_ms(2);

duan=1;

P0=table1[num1%10]; duan=0;

wei=1;

P0=0xef;

wei=0;

delay_ms(2);

duan=1;

P0=table1[num1/10]; duan=0;

wei=1;

P0=0xf7;

wei=0;

delay_ms(2);

duan=1;

P0=0x40;

duan=0;

wei=1;

P0=0xfb;

wei=0;

delay_ms(2);

duan=1;

P0=table1[num2%10]; duan=0;

wei=1;

P0=0xfd;

wei=0;

delay_ms(2);

duan=1;

P0=table1[num2/10];

duan=0;

wei=1;

P0=0xfe;

wei=0;

delay_ms(2);

}

}

void TO_time() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

num++;

if(num==20)

{

num=0;

num3++;

if(num3==60)

{num3=0;

num1++;

if(num1==60)

{num1=0;

num2++;

if(num2==24)

num2=0;

}

}

}

}

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存ucharScan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 ucharKey_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++);

} void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; } void Increase_Second() //秒处理函数 { if((++s>59)) { s=0;Increase_Minute(); } DSY_BUFFER[6]=DSY_CODE[s/10]; DSY_BUFFER[7]=DSY_CODE[s%10]; } void T0_INT() interrupt 1 //T0中断动态扫描数码管显示 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; P2=Scan_BIT; //选通相应数码管 P0=~DSY_BUFFER[DSY_IDX]; //段码送p0进行取反,共阴共阳转换Scan_BIT=_crol_(Scan_BIT,1);//准别下次选通的数码管 DSY_IDX=(DSY_IDX+1)%8; //索引0-7内循环 } void T1_INT() interrupt 3 //T1中断控制时钟运行 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(++s100==20) //50ms*20=1s延时 { s100=0;Increase_Second();

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

数码管时钟显示C程

/* 数码管时钟显示led移动C 程序 使用共阳极数码管 */ #include<> #include<> #define uint unsigned int #define uchar unsigned char sbit wela1 = P2^0; 果要显示1~8数值,最好多加前后两位数0跟9, 因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ uchar code tablew[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; 如果要显示,也会因为++而在第二轮中显示出*/ duan=1; //开启段显端 P0=tabled[numd];//附段显P0值对应段显值对码表 duan=0; //锁存 wei=1; //开启位显端 P0=tablew[numw];//附位显P0值对应位显值对码表 wei=0; //锁存 numw++; //相当于位显移位 if(numw==8) //如果位显值到对应位显对码表第八位则转下执行 numw=0; //重新附值位显值对应对码表第0位起 /* 下面是简单的单个数码管显示例证第一骤, 修改后在第三步骤内 #include"" #include""

sbit duan=P2^6; //段显端口 sbit wei=P2^7; //位显端口 void main() { //P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写 duan=1; //开启段显端口 P0=0x06; //附值段显数值为1,可以查阅数码管电路图相对应显示的对码表 duan=0; //锁存,保持上一步段显状态,硬件说明请查阅74HC573功能 wei=1; //开启位显端口 P0=0xfe; //附值位显位置,01111111,左边第一位,为0的显示 wei=0; //锁存,保持上一步位显状态,硬件说明请查阅74HC573功能 } */ } } } void timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应, 感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/ { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; } /* 以上有什么地方还需要改进的还请老师明示 */

8位数码管显示时钟

本人依据AT89C51和8位数码管为素材,以最少的见实现最多的功能! 本程序开机流动显示学号可实现时钟,日历,定时闹钟,秒表等功能! C程序: #include unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //用一维数组定义-9、横杠、全灭 unsigned char num[12]={2,0,0,9,3,5,0,7,0,1,2,0} ; unsigned char a[8]; unsigned char second=0,minute=0,hour=0,year=0,mon=1,day=1,day1,hsec,sec_m,min_m,N,temp1; unsigned char minute1=0,hour1=0; unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //扫描 unsigned char k=0; unsigned int temp; // 记录毫秒为秒的变量 unsigned char M,S_flag; //M是模式,更新时间的种模式加上正常模式 S_flag闪烁标志 sbit K0=P3^7; //K0是闹钟起停标志位 sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; sbit BEEP=P3^3; void delay(unsigned n) //0.2毫秒 { int x,y; for(x=0;x

数码管时钟显示(含有原理图)

简单的共阴极数码管时钟显示程序(简单、易于理解,如果想定时只要再次基础上稍作修改即可) #include #define uint unsigned int #define uchar unsigned char uchar aa,shi1,shi0,fen1,fen0,miao1,miao0; uint temp; ucharshi,fen,miao; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar shi1,shi0,fen1,fen0,miao1,miao0) { P2=0xfe; P0=table[shi1]; delay(1); P2=0xfd; P0=table[shi0]; delay(1); P2=0xfb; P0=0x40;//"-" delay(1); P2=0xf7; P0=table[fen1]; delay(1); P2=0xef; P0=table[fen0]; delay(1); P2=0xdf;

P0=0x40;//"-" delay(1); P2=0xbf; P0=table[miao1]; delay(1); P2=0x7f; P0=table[miao0]; delay(1); } voidinit() { temp=41760; TMOD=0x01; TH0=(65536-46080)/256; TL0=(65536-46080)%256; EA=1; ET0=1; TCON=0x10; //TR0=1; } void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==86400) { temp=0; } shi1=temp/3600/10; shi0=temp/3600-(shi1*10); fen1=temp%3600/60/10; fen0=temp%3600/60-(fen1*10);

8位数码管显示电子时钟c51单片机程序文件

8位数码管显示电子时钟c51单片机程序 时间:2012-09-10 13:52:26 来源:作者: /* 8位数码管显示时间格式 05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #include sbit KEY1=P3^0; //定义端口参数 sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; //定义指示灯参数 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为 12:30:00 void delay(unsigned intt) { while(--cnt); } /******************************************************************/ /* 显示处理函数 */ /******************************************************************/ void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示小时 StrTab[1]=tab[hour%10]; StrTab[2]=0x40; //显示"-" StrTab[3]=tab[minute/10]; //显示分钟 StrTab[4]=tab[minute%10]; StrTab[5]=0x40; //显示"-" StrTab[6]=tab[second/10]; //显示秒 StrTab[7]=tab[second%10]; } main()

数码管时钟显示C程序.doc

数码管时钟显示C程序 /*数码管时钟显示led移动C程序使用共阳极数码管*/#include#include#defineuintunsignedint#defineucharunsignedchar sbitwela1=P2 ;//数码管wela管脚定义sbitwela2=P2 ;sbitwela3=P2 ;sbitwela4=P2 ;uchartime,d1,d2,d3, d4,temp,tem,aa;unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0 x99,0x92,0x82,0xF8,0x80,0x90};voiddispl(chara,charb,charc,chard) ;voiddelay(uintz)//延时程序{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//主函数voidmain(){time=0;TMOD=0x01;//中断定时初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1; TR0=1;aa=0;temp=0xfe;tem=0xff;d1=0;d2=0;d3=0;d4=0;while(1){i f(time==12月1号********//#include“at89x52.h“#defineucharunsignedchar#defineuin tunsignedintucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0xbf,0xff};ucharn;ucharhh,mm,ss;ucharnhh,nmm,ns s;uintyear;ucharday,mon,week;ucharhhs,hhg,mms,mmg,sss,ssg;ucha rdays,dayg,mons,mong;ucharnhhs,nhhg,nmms,nmmg,nsss,nssg;ucha rset1=1,set2=1;sbitfm=P3 ;sbitk1=P3 ;sbitk2=P3 ;sbitk3=P3 ;s bitk4=P3 ;uchartable1[]={31,31,29,31,30,31,30,31,31,30,31,30,31} ;//闰年uchartable2[]={31,31,28,31,30,31,30,31,31,30,31,30,31};//非闰年

#51单片机数码管时钟电路的设计_AT89C51

广东石油化工学院 《51单片机原理和实践》课程设计报告学院计算机和电子信息学院 专业 班级 学号 姓名 指导教师 课程成绩 完成日期 2010年12月27日 数码管时钟电路的设计 一、设计目的: 通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。 二、设计要求: LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

三、设计实验内容: 1. 硬件的设计 其采用AT89C51单片机使用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。 2. 系统总体分析 系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。 ●显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间, 用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。 ●时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。 ●模式切换模块(MODE):切换电子钟的设置模式,包括时设置、分设 置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。 ●模式设置模块(CONFIG):通过判断设置模式(MODE),执行相应的 设置。如时、分、秒的增1以及闹铃开关的变换。 另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms,用以消除机械抖动。 主循环流程图大致如下:

LED数码管显示电子钟

#include #include unsigned char data dis_digit; unsigned char key_s, key_v; unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8]; unsigned char data dis_index; unsigned char hour,min,sec; unsigned char sec100; sbit K1 = P1^4; sbit K2 = P1^5; bit scan_key(); void proc_key(); void inc_sec(); void inc_min(); void inc_hour(); void display(); void delayms(unsigned char ms); void main(void) { P0 = 0xff; P2 = 0xff; TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xdc; TL1 = 0; TH0 = 0xFC; TL0 = 0x17; hour = 12; min = 00; sec = 00; sec100 = 0; dis_buf[0] = dis_code[hour / 10]; // 时十位

51单片机数码管显示时钟(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是主文件main.c 的内容 /****************************************************************************** * * 实验名: 万年历实验 * 使用的IO : * 实验效果:1602显示时钟 * 注意: ******************************************************************************* / #include #include"ds1302.h" //数码管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Num=0; unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void LcdDisplay(); void Timer0Configuration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() {

数码管电子时钟

SOUTH CHINA UNIVERSITY OF TECHNOLOGY 单片机大作业 ――电子日历时钟的制作 班级: 姓名: 学号: 编号:07

题目及功能要求 1. 制作一个电子日历时钟,使用汇编语言进行软件编程 实现功能2. (1)显示北京时间并能校准 ⑵时、分、秒之间以及年、月、日之间以小数点隔开 (3)显示公历日期并能校准,能够自动识别“闰年”以及“大月、小月 ⑷运动秒表,能够后台计时,秒表精确到0.05S (5) 闹钟功能,有闹钟开关,并能显示当前闹钟是否开启 (6) 整点报时提醒 硬件方案 1 . AT89S52最小系统 2. 显示电路采用动态扫描驱动电路,AT89S52的P0 口连接74LS244总线驱动器,输岀信号利 用三极管8550进行放大,通过P1 口对数码管进行段选扫描,AT89S52的P1.2?P1.7 口对数码管进行位选扫描 3. 两个按键开关,分别接AT89S52的两个外部中断引脚 4. AT89S52的P2.0 口输岀经三极管9012放大,驱动有源蜂鸣器发声 三、电路原理图

四、系统元件布局、布线图 ? L A* 1

SOO 元器件清单五、 型号及标称值恢复现场数量AT89S52 1 HD74LS244 系统初始化 1 8550晶体管中断返回 6 9012晶体管 1 蜂鸣器(有源)丫整点?提示音 1 10uF电解电容 1 7段数码管(共阳) 6 电阻3KN 9 电阻200闹钟到?8 4.7K电阻 1 按钮开关N 3 12M晶振丫 1 瓷介电容30pF闹铃提示音 2

软件方案六、0中断提供,设置为最高优先级,定时器定时器“时钟”基准时间由. 中断20次即可实现一秒定时。 2. 由于使用较多数码管,显示模块使用动态扫描方式,定义全局变量,保存各个数位的BCD 码,通过查表,将字模送到P0 口进行输出;为了显示闹钟的状态,设置了另一字模数据表,在 显示前进行判断,若为闹钟开关设置状态则调用此字模数据表。 3. 按键中断的时候,在2个按键都没按下的状态, 2个中断引脚都为低电平,则一直调用中断 0的子程序,每次进入中断0子程序中便检测中断1的引脚是否为高电平,即检测开关KEY1是 否按下;相反,在按下KEY0时,进入中断1子程序,每次进入中断1子程序都检测中断0的引脚是否为高电平,为高电平则表示已按下。 4. 用寄存器R7来记录当前切换的功能,分别为, 0 —时间;1—日期;2-闹钟;3-闹钟开关;4-秒表。 5. 秒表的实现,采用基准时钟作为秒表时钟源,精度可以达到0.05s。 6. 闹钟的实现,在主程序中,循环判断闹钟设置的时分与当前时分是否相等,闹钟持续1分钟 7. 整点报时的实现,在主程序中,先判断当前时间的秒,若为0再判断分,再为0则使蜂鸣器嘀一声,循环判断。

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计 一.功能要求 1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时 间时、分、秒。 2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。 二.方案论证 1.数字时钟方案 数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。 方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。 方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。 基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。 2.数码管显示方案 方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,

单片机数码管显示时钟程序

单片机数码管显示时钟 程序 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

#include //#include#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit beep=P2^3; unsigned code table[]={ 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c, 0x39 , 0x5e , 0x79 , 0x71 }; uchar num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi; uchar ns,ns1,nf,nf1,numns,numnf; void delay(uint z); void keyscan (); void keyscan1 (); void alram();

void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1); void display0(uchar nf,uchar nf1,uchar ns,uchar ns1); void main() { TMOD=0x01;//设定定时器0工作方式1 TH0=(65536-46080)/256 ; TL0=(65536-46080)%256 ; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0中断 numns=12; numnf=0; while(1) { if(dingshi==0) { keyscan (); display(m,m1,f,f1,s,s1); alram(); } else {

LED数码管显示电子钟设计

《单片机原理及应用》 课程设计说明书 题目LED数码管显示电子钟设计系(部) 专业(班级) 姓名 学号 指导教师 起止日期

课程设计任务书系(部):专业: 课题名称LED数码管显示电子钟设计 设计要求1、课题内容:设计一种基于 AT89S52 单片机的数码管显示电子时钟,要求如下: (1)、能正确显示时间,时钟由八位数码管显示,显示格式为:XX小时--XX 分--XX秒。 (2)、时间能够由按键调整,误差小于1S。 (3)、闹钟功能:时间运行到与闹钟设定时间时,闹钟响(持续响3秒) (4)、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几声(每声持续响2秒,每两声之间时间间隔1秒)。 (5)、通过按键切换,可以显示当前日期,显示格式为:XX 年?XX 月 ?XX日,5秒钟后自动返回时间显示模式。 2、要求: 完成该系统的硬件和软件的设计,在 Proteus 软件上仿真通过,并提 交一篇课程设计说明书。 设计工作量1、汇编或C51语言程序设计; 2、程序调试; 3、在Proteus上进行仿真成功; 4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。 工作计划 起止日期工作内容 第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天~第六天程序设计 第六天~第八天程序调试、仿真 第九天~第十天系统测试并编写设计说明书 教研室意见系(部)主管领导意见

目录 目录 (3) 一、摘要 (4) 二、设计内容 (4) 2.1、任务要求 (4) 2.2、设计程序方案 (4) 2.3 设计电路仿真图 (6) 三、心得体会 (9) 四、参考文献 (9)

数码管电子时钟

单片机大作业——电子日历时钟的制作 班级: 姓名: 学号: 编号: 07

一、题目及功能要求 1.制作一个电子日历时钟,使用汇编语言进行软件编程 实现功能.2. ____________________________________________________________________________________________ (1)显示北京时间并能校准 (2)时、分、秒之间以及年、月、日之间以小数点隔开 (3)显示公历日期并能校准,能够自动识别“闰年”以及“大月、小月” (4)运动秒表,能够后台计时,秒表精确到0.05S (5)闹钟功能,有闹钟开关,并能显示当前闹钟是否开启 (6)整点报时提醒 二、硬件方案 1.AT89S52最小系统 2.显示电路采用动态扫描驱动电路,AT89S52的P0口连接74LS244总线驱动器,输出信号利用三极管8550进行放大,通过P1口对数码管进行段选扫描,AT89S52的P1.2~P1.7口对数码管进行位选扫描 3.两个按键开关,分别接AT89S52的两个外部中断引脚 4.AT89S52的P2.0口输出经三极管9012放大,驱动有源蜂鸣器发声 三、电路原理图

四、系统元件布局、布线图 1 ____________________________________________________________________________________________

元器件清单五、

软件方案六、0中断提供,设置为最高优先级,定时器定时器“时钟”基准时间由.1 AT89S5202 ____________________________________________________________________________________________ 设为工作方式1,即16进制计数器方式,计数初值设为15536,即可实现0.05s中断一次,连续中断20次即可实现一秒定时。 2.由于使用较多数码管,显示模块使用动态扫描方式,定义全局变量,保存各个数位的BCD 码,通过查表,将字模送到P0口进行输出;为了显示闹钟的状态,设置了另一字模数据表,在显示前进行判断,若为闹钟开关设置状态则调用此字模数据表。 3.按键中断的时候,在2个按键都没按下的状态,2个中断引脚都为低电平,则一直调用中断0的子程序,每次进入中断0子程序中便检测中断1的引脚是否为高电平,即检测开关KEY1是否按下;相反,在按下KEY0时,进入中断1子程序,每次进入中断1子程序都检测中断0的引脚是否为高电平,为高电平则表示已按下。 4.用寄存器R7来记录当前切换的功能,分别为,0-时间;1-日期;2-闹钟;3-闹钟开关;4-秒表。 5.秒表的实现,采用基准时钟作为秒表时钟源,精度可以达到0.05s。 6.闹钟的实现,在主程序中,循环判断闹钟设置的时分与当前时分是否相等,闹钟持续1分钟7.整点报时的实现,在主程序中,先判断当前时间的秒,若为0再判断分,再为0则使蜂鸣器嘀一声,循环判断。 七、程序框图

实验二数码管时钟显示

单片机实验报告 题目:实验二时钟显示实验 班级:0310405 姓名:左立刚 学号: 031040522 指导老师:高林 时间: 2013年5月26日

实验二时钟显示实验 一、实验目的 (1)熟练掌握单片机定时器的编程技巧; (2)掌握八段数码LED显示器的工作原理和编程方法。 二、实验内容 (1)在实验箱上完成: 编写程序,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示(左边2个数码管显示“时”,中间2个显示“分”,右边2个显示“秒”)。 (2)用Proteus软件参照实验电路连线并仿真运行,得出与实验箱上相同的软件仿真结果。 所用元器件:单片机AT89C51、8位锁存器74LS273或74LS373、3-8译码器74LS138、排阻或电阻RESPACK-8(RES)、或非门74LS02、非门NOT、共阳极六合一数码7SEG-MPX6-CA 三、程序框图 四、实验预备知识 1.数码显示电路:

①电路组成:6个共阳极数码管、2个74LS273锁存器 ②端口地址: 字型口(段码锁存器)——FFDCH;字位口(位码锁存器)——FFDDH 2.动态显示: 每次只有一个数码管显示其相应字符,并且从左往右反复快速扫描,利用人眼的“视觉滞留”效益实现“同时”显示不同字符的工作方式。 3.字型码表:(共阳极) 0~9:0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 五、仿真电路图(用proteus软件画出): P00 P01 P02 P03 P04 P05 P06 P07 P00 P01 P02 P03 P04 P05 P06 P07 WR CLK CLK1 CLK2 CLK1 CLK2 A B C D E F G H A B C D E F G H 1 2 3 4 5 6 1 2 3 4 5 6 CS1 WR CS2 WR CS1 CS2 P00 P01 P02 P03 P04 P05 P06 P07 P00 P01 P02 P03 P04 P05 P06 P07 CLK P21 P22 P23 P24 P25 P26 P27 P20 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C51 5 6 4 U2:B 74LS02 8 9 10 U2:C 74LS02 D0 3 D1 4 D2 7 D3 8 D4 13 D5 14 D6 17 D7 18 CLK 11 MR 1 Q0 2 Q1 5 Q2 6 Q3 9 Q4 12 Q5 15 Q6 16 Q7 19 U3 74LS273 D0 3 D1 4 D2 7 D3 8 D4 13 D5 14 D6 17 D7 18 CLK 11 MR 1 Q0 2 Q1 5 Q2 6 Q3 9 Q4 12 Q5 15 Q6 16 Q7 19 U4 74LS273 D0 3 D1 4 D2 7 D3 8 D4 13 D5 14 D6 17 D7 18 CLK 11 MR 1 Q0 2 Q1 5 Q2 6 Q3 9 Q4 12 Q5 15 Q6 16 Q7 19 U5 74LS273 2 3 4 5 6 7 8 9 1 RP1 RESPACK-8 A 1 B 2 C 3 E1 6 E2 4 E3 5 Y0 15 Y1 14 Y2 13 Y3 12 Y4 11 Y5 10 Y6 9 Y7 7 U6 74LS138 U7 NOT

相关文档
相关文档 最新文档