单片机时钟显示(c语言编程)

刚开始学单片机,老师让做一个简单的时钟程序!!

#include"reg51.h"

sbit TIMESTOP_K = P1^0;

void Delay2ms(unsigned int DelayTime)

{

unsigned int Count;

for(Count = 0;Count < DelayTime*50;Count++);

}

code unsigned char LedSeg[10] = {0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

main()

{

unsigned int Counter = 0;

unsigned char Sec = 0,Min = 0;

bit StopFlag = 0; //0: Time Run 1:Time Stop

while(1)

{ //显示功能

switch(++Counter%5)

{

case 0:

case 1:

P0 = 0x02; // 0000 0010

P2 = LedSeg[Sec % 10];

break;

case 2:

P0 = 0x04; // 0000 0100

P2 = LedSeg[Sec / 10];

break;

case 3:

P0 = 0x08; // 0000 1000

P2 = LedSeg[Min % 10];

break;

case 4:

P0 = 0x10; // 0001 0000

P2 = LedSeg[Min / 10];

break;

}

//延时

Delay2ms(1);

//走时

if(StopFlag == 0)

{ if(Counter >= 500)

{

Counter = 0;

if(++Sec > 59)

{

Sec = 0;

if(++Min > 59)

{

Min = 0;

}

}

}

}

//按键工作,让走时停止,StopFlag = 1

if(TIMESTOP_K == 0)

{

Delay2ms(5);

while(TIMESTOP_K == 0);

StopFlag = ~ StopFlag;

}

}

}

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

单片机技术课程设计 数字电子钟 学院: 班级: 姓名: 学号: 教师:

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词: 电子钟 AT89C52 硬件设计软件设计

目录 一、数字电子钟设计任务、功能要求说明及方案介绍 (4) 1.1 设计课题设计任务 (4) 1.2 设计课题的功能要求说明 (4) 1.3 设计课的设计总体方案介绍及工作原理说明 (4) 二、设计课题的硬件系统的设计 (5) 2.1硬件系统各模块功能简要介绍 (5) 2.1.1 AT89C52简介 (5) 2.1.2 按键电路 (6) 三、设计课题的软件系统的设计 (6) 3.1 使用单片机资源的情况 (6) 3.2 软件系统个模块功能简要介绍 (7) 3.3 软件系统程序流程框图 (7) 3.4 软件系统程序清单 (7) 四、设计课题的设计结论、仿真结果、误差分析 (9) 4.1 设计结论及使用说明 (9) 4.2 仿真结果 (10) 结束语 (12) 参考文献 (12) 附录 (13) 附录A:程序清单 (13)

单片机基于c语言编写时钟

单片机基于c语言编写时钟 #include #define uint unsigned int #define uchar unsigned char char led[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};//共阴数码管数字码 #define weixuan P0 //P0为数码管的段选 sbit sck=P2^7; //移位时钟 sbit tck=P2^6; //锁存时钟 sbit data1=P2^5; //串行数据输入 sbit x1=P1^0; sbit x2=P1^1; sbit x3=P1^2; sbit bee=P3^5; sbit time_change=P1^5; //P3^0为"调时"按键 sbit time_choose=P1^6; //P3^1为"选择时分秒"按键 sbit time_inc=P1^7; //P3^2为"增加"按键 sbit time_ok=P3^3; //P3^3为"完成"按键 uint t; uchar sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位 int choose_n; //按下"选择时分秒"按键的次数 int flag; //定义"调时"按键的标志位 //--------------------------------------------------------------------- void init(); void display(); void delay(int x); void time_modify(); void send(uchar data8); void naozhong(); //--------------------------------------------------------------------- void main() { init(); while(1) { TR0=1; display(); time_modify(); } } //--------------------------------------------------------------------- void init() {

51单片机带字库液晶12864ds1302数字时钟c源程序(无按键修改功能)

51单片机+带字库液晶12864+DS1302数字时钟C 源程序(无按键修改功 能)过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了 这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52 +带字库液晶 12864(ST7920)+DS1302实时时钟) 实现功能: 简单,数字时钟 +日期(以后会不断完美)。 C 语言源程序如下: #include #include #define uchar unsigned char #define uint unsigned int /*DS1302 端 口设置 */ sbit SCK=P3A 6; sbit SDA=P3A4; sbit RST = P3A5; bit ReadRTC_Flag; /* 12864 端口定义 */ #define LCD_data P0 sbit LCD_RS = P2A4; sbit LCD_RW = P2A5; sbit LCD_EN = P2A 6; //液晶使能控制 sbit PSB 二卩2八1; //并口控制 //DS1302 时钟 //DS1302 IO // DS1302 复位 //读DS1302全局变量 //带字库液晶 12864数据口 // 寄存器选择输入 // 液晶读/写控制

sbit RES=P2A3; uchar code dis1[] = {"电子设计天地"};// 液晶显示的汉字uchar code dis2[] = {"有志者,事竟成!"}; uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'};unsigned char temp; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void lcd_pos(uchar X,uchar Y); //确定显示位置 unsigned char l_tmpdate[7]={0,7,16,19,10,1,9};〃秒分时日月周年09-10-19 16:07:00 code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年最低位读写位 code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address ); void Read_RTC(void);//read RTC void Set_RTC(void); //set RTC void InitTIMER0(void);//inital timer0 /***************************************************************** **//*

单片机的C语言程序设计——时钟

单片机的C 语言程序设计——时钟 1. 针对图1,用单片机C语言编程实现时钟,并利用Protues 仿真演示。(1秒钟的 定时使用定时器中断方式) (1)硬件原理图 图1 定时电路原理图 (2)软件流程图

(3)程序清单(标注注释) #include static unsigned char code seg[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ; // 字形码void show(); unsigned int num[2]; void main(void) { P2=0x00; P3=0x00; //P2,P3赋初值 TMOD=0x00; TH0=0x10; TL0=0x60; //定时4mS EA=1; ET0=1; TR0=1 ; //开启定时器

while(1); //进入死循环,进入中断判断 } void timeint(void) interrupt 1 using 2 { unsigned int h; //定义变量h h++; if(h==125){ show(); //调用显示程序 h=0; } //循环125次,达到定时一秒后,让h重新计数 TH0=0x10; TL0=0x60; //重新赋给定时器初值 } void show() //显示程序 { unsigned char s; num[0]=s%10; //取个位的数 num[1]=s/10; //取十位的数 P3=seg[num[0]]; //根据字形码显示个位的数 P2=seg[num[1]]; //根据字形码显示十位的数 s++; //显示的数加一 if(s==60) s=0; //计数到60的时候,重新让它等于0.如此循环,成为秒表2.针对图2,用单片机C语言编程按键按下,显示数据增加1,并用Protues仿真运行

单片机电子钟c语言程序

单片机电子钟程序设计实习报告 单片机LCD1602电子钟毕业论文 这次嵌入式系统综合实习已经结束了,哎..... 在网络发现很多计算机专业的毕业生都是以电子钟为题的毕业论文,个人感觉做一个电子钟程序设计的技术含量,技术水平都不高。呵呵个人还是比较偏向于软件开发的,比较喜欢vc++开发。 一、引言 1.1课题的背景及目的 随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式,而单片机技术又作为计算机技术中的一个独立分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用,特别是在工业控制和仪表仪器智能化中起极其重要的作用.本文利用单片机强大的控制功能和内部定时器重要部件,设计了一款自行对时间进行调整以及把时、分、秒用LCD显示的电子钟。 电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌

握各种组合逻辑电路与时序电路的原理与使用方法 1.2课题的内容要求及研究方法 ①时间以24小时为一个周期; ②显示时、分、秒; ③具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; 本文先按照设计的一般步骤,先选定用单片机实现的方案,了解设计要求,再分别从硬件系统设计和软件系统设计两个宏观方面着手.然后大量阅读相关资料,硬件方面,熟练单片机工作基本原理,查出相关元器件的参数,八个八段数码管,继电器等性能.然后画出系统框图和单元电路原理图,再对系统工作原理按照单元电路作简单的说明。软件方面,熟悉编程语言,查找相关子程序.熟悉使用Keil uVision2开发软件及STC-ISP下载软件.把原器件按电路原理图安装.最后再对硬件和软件系统进行调试和仿真。课题的内容是要求设计一款电子钟,而且要求计时准确,显示直观,清晰,时能够精确到秒。最后设计出来的产品,要求电路简洁,稳定性好。 二、课题设计 1、基本原理 本设计基于单片机技术原理,以单片机芯片A T89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。单片机扩展的LCD显示器用来显示秒、分、时计数单元中的值。整个设计包括两大部分: 硬件部分和软件部分,

单片机c 语言编程时钟及闹钟程序

一·功能 1、计时功能,数码管显示数值从00:00:00--23:59:59循环替换,且周期时间与实际时间吻合。 2、定时闹钟功能,按下“定时”键后,可以设定所需要的任意时间,定时完成后,当到达设定时间后,蜂鸣器发声。 3、调整时间功能,根据此项功能可将时钟调至正确的时间。 4、查看定时功能,当设定完成后可以查看上次定时的时间,且能在此基础上进行重新定时。 二·按键说明 设定键:按一次开始设定时间,并将设定过程显示在数码管上。若未按此键,则其他按键无效。设定过程中,再按一次此键,定时结束,数码管显示返回时钟。当第一次按下设定键时,显示值为00:00:00,在此基础上调节定时时间。第一次设定完成后,以后再按设定键,显示初值则为上次定时的时间。 确定键:在定时过程中按下此键,则保留当前设定的时间为定时时间。若定时过程未按此键,定时无效。 向上键:按下此键,使得当前设定值在现有数值上加一,当加至满位时,当前值变为零。 向下键:按下此键,使得当前设定值在现有数值上减一,当减至零时,当前值变为满位减一。 向左键:按下此键,使得设定值移向左边一位,若已经在最左边,则移至最右边。 向右键:按下此键,使得设定值移向右边一位,若已经在最右边,则移至最左边。三·具体操作演示 (一)·定时及查看定时演示 1.仿真开始。如图: 2、按键如图:

3、按下设定键,开始设定时间,如图: 4、如图所示,当前设定时位。按向上键,使数值加一。 5、按下向右键,设定位移至分位。 6、按下向下键,使数字减一。

7、按确定键,确定当前设定的时间。再按设定键,退出定时,开始时钟显示。 8、设定完成后按设定键,显示前次设定值,可在此基础上重新设定,也可直接再按设定键推出。 9、当时钟运行到设定时间时,蜂鸣器发声。 (二)·调整时间演示 1、计时开始。 2、按照定时的方法开始设定时间,使其显示20:10:09。

51单片机数码管电子时钟C程序

//**单片机stc89c52, 8位共阴数码管12M晶振 //*******P0 位选,P2 段选❖******// #include 〃reg52・ h〃 #define uchar unsigned char #define uint unsigned int uchar code tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40, Oxff}; uchar n; uchar hh, mm, ss; uchar nhh, nmm, nss; uint year; uchar day, mon, week; uchar hhs, hhg, mms, mmg, sss, ssg; uchar days,dayg, mons, mong; uchar nhhs, nhhg, nmms, nmmg, nsss, nssg; uchar setl=l, set2=l; sbit dula=P3 3; sbit fm=P3 2;

sbit kl二P3"4; sbit k2二P3"5; sbit k3二P3飞; sbit k4二P3"7; uchar tablel[] = {31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 〃闰年uchar table2[] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //非闰年void jishi (); void baoshi (); void alarm(); void set_time(); void set_alarm(); void set_mdw(); void key_change(): void key_set (); void delay (int m) 〃延时程序,延时m*0. 5ms uint i; uint j; for (i=0;i

51-数字时钟-89C52-单片机C语言程序

数字时钟89C52 单片机C语言程序 STC89C52| /************** 【数字时钟】****************/ /****【功能】1、时间显示2、秒表3、闹钟4、日期显示都可以设置****/ #include /*包含器件配置文件*/ #define uchar unsigned char /*宏定义字符型数据整型数据*/ #define uint unsigned int uchar code H[] = {0x0f, 0x07, 0x0b, 0x0d, 0x0e}; /*按键【P3】端口断码用于按键*/ char Code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /*显示【0 1 2 3 4 5 6 7 8 9】数字的数码管的段码*/ uchar code C[] = {0x0, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; /*列扫描控制LED1位2位3位4位5位6位7位8位*/ uchar MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; uchar A; uchar BIN=0; /* 【BIN】作为倒计时开始的标志*/ uchar hour = 0; /* 定义[时][分][秒] */ uchar min = 0; uchar sec = 0; uint shi=12; uint fen=30; uchar Mmin=0; uchar Msec=30; uchar M0=0; uchar m=0; uchar year=9; uchar month=7; uchar month2; uchar day=19; uchar set1 = 1; /* set1=1 是调节时分秒set1=2时时调节年月日set=3时事调节闹钟*/ uchar set2 = 1; /* set2=1时是调节【时】位set2=2时事调节【分】位*/ uint x = 0; /* x 每【0.01s】自加一*/ void Delay(uint k);

基于单片机的带温度显示的数字钟设计(c51语言编程)

基于单片机的带温度显示的数字钟设计(c51语言编程)开题报告 电气工程及其自动化 一、课题研究意义及现状 1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列 不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后 来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段 的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越 来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要 的一席之地。 单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列 优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防 工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个 角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一、将C语言向单片机8051上移植十余20世纪80年代的中后期,经过 几十年的努力,C语言已成为专业化单片机上的实用高级语言。C语言是 一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语 言的功能。此外,C语言程序具有完善的模块程序结构,从而为软件开发 中采用模块化程序设计方法提供了有力的保障。 与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的 优势,因而易学易用。另外C51可以缩短开发周期,降低成本,可靠性,

可移植性好。因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。 随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足 于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。 而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路 技术,而且还加入了需要模拟电路技术和单片机技术。其电路可以由时钟 模块、人机接口模块、环境温度检测模块等部分组成。比机械式时钟具有 更高的直观性和准确性,调节起来方便,且无机械装置,能够使用更长时间,并且方便维护保养,因此得到了广泛的使用。数字钟已成为人们日常 生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公 室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。因此,研究实用数字钟及其扩展应用,具有很大的实用价值。二、课题研究的主 要内容和预期目标 学习51单片机的基础知识熟悉其基本模块的使用、使用HD7279驱动LED数码管显示、键盘扫描和16位键盘的输入、以及温度传感器DS18B20 的温度采集等。利用C51编程实现一个带温度计的 数字钟。 1)设计目标 熟悉单片机基础知识,了解51单片机的基本功能以及温度传感器 DS18B20的使用,熟悉开发板的特征,设计并利用C51进行编程实现要求 的功能,为将来从事单片机开发、和产品制造打下基础。 2)本设计的主要内容如下:

单片机C语言 电子时钟程序[1]

单片机C语言电子时钟程序[1] 单片机c语言-电子时钟程序[1] #include#defineuintunsignedint#defineucharunsignedcharunsignedcharkey2;bitding =1; unsignedchargetkey(void);uchara,n=0,shi,fen,miao;voiddelay01s(void); ucharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; ucharled1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//存有小数点的voidinit();//函数声明voiddelay(unsignedcharz);//函数声明voiddisplay();//函数声明//函数声明voidmain()//函数声明{ p1=0xfe;//对p1口赋初值init();//函数调用while(1){ //函数调用key2=getkey();switch(key2){case1:shi++;if(shi==24){ shi=0;}break;case2:fen++;if(fen==60){fen=0;}break;case3:if(fen!=0)fen--; if(fen==24){ fen=0;}break;case4:ding=~ding;default:break;}display();//函数调用}} voidinit(){ tmod=0x01;//定时器工作方式选择和赋初值th0=(65536-50000)/256;tl0=(65536-50000)%6;ea=1;//开总中断et0=1;//开定时器中断tr0=1;//启动定时器} voidtimer0()interrupt1//中断服务程序{ if(ding==1){ th0=(65536-50000)/256;//中断时间50ms tl0=(65536-50000)%6;//定时器重新赋初值a++;if(a==10){ n=~n;} if(a==20){ n=~n; a=0;

【单片机】c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)显示当前时间:9点58分34秒(第一个零表示闹钟未开启)

当前日期:10年4月六日 摘要:本设计以单片机为核心,LED数码管动态扫描显示。采用矩阵式键盘输入能任意修改当前时间日期和设定闹钟时间。具有显示年月日(区分闰年和二月),闹钟报警和整点报时功能 说明 系统的功能选择由7个按键完成。 其中P3.0,P3.1分别对应调整当前时间的时和分, P3.2为外部中断0,控制闹钟功能的开启/关闭(开启时数码管第一位显示字母’c’)

P3.3用作外部中断1,当前时间的显示与闹铃时间显示切换,闹钟显示时按 P3.0,P3.1可进行闹钟时分的设定,此时,led1灯灭。闹铃时间到切闹钟开关开启时,闹铃响一分钟。 P3.5\P3.6\P3.7对年月日进行调整(第一次按P3.5,就进入了年月日的显示,现在就可对日期进行调整)。按P3.1回到当前时间的显示状态。 整点到时:报警对应小时的次数。 程序如下: #include #include #include #define uchar unsigned char #define uint unsigned int uchar data keyvalue; //查到的键值 uchar data keys; //转换出的数字 uchar dis[8]; uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x 39,0xf7}; // 0 1 2 3 4 5 6 7 8 9 - 灭灯 c n sbit led_duan=P2^6; //段选通 sbit led_wei=P2^7; //位选通 sbit speaker=P2^3; //蜂鸣器 sbit minitek=P3^0; //分校正按键 sbit hourk=P3^1; //小时校正按键 sbit p3_4=P3^4; // sbit yeark=P3^5; //年 sbit monthk=P3^6; //月 sbit dayk=P3^7; //日 uchar data wei,i; bit leap_year; //闰年标志位 bit dis_nyr; bit cal_year=1; bit calculate=1; //显示年月日与当前时间切换标志 uchar data c_min; //闹钟‘分寄存单元 uchar data c_hou; //闹钟、小时寄存单元

利用单片机的定时器设计一个数字时钟

利用单片机的定时器设计一个数字时钟 数字时钟是我们日常生活中常见的计时工具,可以准确地显示当前 的时间。而单片机的定时器则可以提供精准的定时功能,因此可以利 用单片机的定时器来设计一个数字时钟。本文将介绍如何使用单片机 的定时器来设计一个基于数字显示的时钟,并提供基本的代码实现。 一、时钟电路设计 利用单片机设计一个数字时钟,首先需要设计一个合适的时钟电路。时钟电路一般由电源电路、晶振电路、单片机复位电路和显示电路组成。 1. 电源电路:为电路提供工作所需的电源电压,一般使用稳压电源 芯片进行稳定的供电。 2. 晶振电路:利用晶振来提供一个稳定的时钟信号,常用的晶振频 率有11.0592MHz、12MHz等。 3. 单片机复位电路:用于保证单片机在上电或复位时能够正确地初 始化,一般使用降低复位电平的电路。 4. 显示电路:用于将单片机输出的数字信号转换成七段数码管可以 识别的信号,一般使用BCD码和译码器进行实现。 二、单片机定时器的应用

单片机的定时器具有精准的定时功能,可以帮助实现时钟的计时功能。单片机的定时器一般分为定时器0和定时器1,根据具体的应用需求选择使用。 在设计数字时钟时,可以将定时器0配置成定时器模式,设置一个适当的定时时间。当定时器0计时达到设定时间时,会触发一个中断信号,通过中断处理程序可以实现时钟的计时功能。 以下是一个基于单片机的定时器的伪代码示例: ``` void Timer0_Init() { // 设置定时器0为工作在定时器模式下 // 设置计时时间 // 开启定时器0中断 } // 定时器0中断处理程序 void Timer0_Interrupt_Handler() { // 更新时钟显示 }

51单片机电子时钟(C语言)

#include #include #define uchar unsigned char //宏定义 #define uint unsigned int uchar sec,min,hour,sec50,jishu,dtp2; //sec、min、hour、为显示单元,sec50为60秒计数单元,jishu为扫描数码管计数单元 uchar sec1,min1,hour1; //时间中介单元 uchar nzmin,nzhour,nzjishu=0,dispjishu=0; //闹钟分、时定义 uchar data nzbit=0; //闹钟标志位,闹钟默认为开启 uchar data dispbit=0; //显示标志位,默认显示当前时间 uchar data disp[8]; //秒、分、时个位与十位存放数组及‘—’ uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0-9 sbit KEYmin=P3^2; //分加1按钮 sbit KEYhour=P3^3; //时加1按钮 sbit LABA=P1^0; //闹钟输出I/O口

sbit NZdisplay=P3^4; //闹钟显示按钮,按住不放显示闹钟时间,放开则显示当前时间sbit KEYnzmin=P3^5; //闹钟分加1按钮 sbit KEYnzhour=P3^6; //闹钟时加1按钮 sbit KEYoff=P3^7; //关闭闹钟按钮,按第一次为关闭,第二次为开启 void display(); //显示函数声明 void keyscan(); //按键扫描函数声明 void naozhong(); //闹钟判别函数声明 void keynz(); //闹钟按键函数声明 void main() { sec=0; //时间初始化为00—00—00 min=0; hour=0; sec1=0; //显示单元初始化为00—00—00 min1=0; hour1=0; nzmin=01; //闹钟初始时间为01:01 nzhour=01; jishu=0; dtp2=0xfe; P0=0xff; TMOD=0x11; //设T0、T1为模式1 IE=0x8a; TH0=0xb8; //T0定时20ms TL0=0x0; TH1=0xfc; //T1定时1ms TL1=0x66; TR0=1; TR1=1; while(1) { display(); //调用显示子程序 keyscan(); //调用按键子程序 keynz(); //调用闹钟按键子程序 } } void t0int() interrupt 1 //T0定时中断程序 { TH0=0xb8; TL0=0x0; sec50++; if(sec50==50) //对20ms计数50次即1s { sec50=0; //清秒计数器,为下次做准备

单片机时钟1234滚动程序代码

单片机时钟1234滚动程序代码 单片机时钟1234滚动程序代码 在单片机中,可以使用数字显示器来显示时钟。而对于时钟的滚动显示,可以通过不断改变数字的显示值来实现。以下是一个使用C 语言编写的单片机时钟1234滚动程序的代码示例: ```c #include // 引入单片机的头文件 sbit D1 = P2^0; // 数字位选择引脚1 sbit D2 = P2^1; // 数字位选择引脚2 sbit D3 = P2^2; // 数字位选择引脚3 sbit D4 = P2^3; // 数字位选择引脚4 unsigned char code LED_Disp[] = { // 数码管显示0-9的编码值 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5

0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9 }; void delay(unsigned int t) { // 延时函数 unsigned int i, j; for (i = t; i > 0; i--) for (j = 110; j > 0; j--); } void main() { unsigned char i = 0; while (1) { D1 = 1; // 选择第一个数码管 P0 = LED_Disp[i % 10]; // 显示个位数字 delay(5); // 延时 D1 = 0; // 关闭选择 D2 = 1; // 选择第二个数码管 P0 = LED_Disp[i / 10 % 10]; // 显示十位数字

51单片机ds1302DS18b20温度时钟(电路图C语言程序)

时钟电路图: PCB板: 单片机程序: /*=========================================================== ========= 调试要求:

1.MCU:AT89S52芯片或AT89C52 2.晶振:12MHz 功能:多功能时钟+温度计 ============================================================= =======*/ #include #include #define uchar unsigned char #define uint unsigned int sbit dis_bit1=P2^7;//定义数码管控制口 sbit dis_bit2=P2^6;//定义数码管控制口 sbit dis_bit3=P2^4;//定义数码管控制口 sbit dis_bit4=P2^3;//定义数码管控制口 sbit dis_bit5=P2^1;//定义数码管控制口 sbit dis_bit6=P2^0;//定义数码管控制口 sbit led1_bit=P2^2;//定时LED的控制口 sbit led2_bit=P2^5;//定时LED的控制口 sbit s1_bit=P1^0; //定义S1控制口 sbit s2_bit=P1^1; //定义S2控制口 sbit s3_bit=P1^2; //定义S3控制口 sbit dq_ds18b20=P3^3;//定义控制DS18B20 sbit speak=P3^7; //定义蜂鸣器控制口 sbit clk_ds1302=P3^6;//定义控制DS1302的时钟线 sbit io_ds1302=P3^5;//定义控制DS1302的串行数据 sbit rest_ds1302=P3^4; #define smg_data P0//定义数码管数据口 void delay_3us();//3US的延时程序 void delay_8us(uint t);//8US延时基准程序 void delay_50us(uint t);//延时50*T微妙函数的声明 void display1(uchar dis_data);//数码管1显示子程序 void display2(uchar dis_data);//数码管2显示子程序 void display3(uchar dis_data);//数码管3显示子程序 void display4(uchar dis_data);//数码管4显示子程序 void display5(uchar dis_data);//数码管5显示子程序 void display6(uchar dis_data);//数码管6显示子程序 void init_t0();//定时器0初始化函数 void dis_led();//LED处理函数 void judge_s1();//S1按键处理函数 void judge_s2();//S2按键处理函数 void judge_s3();//S3按键处理函数 void dis(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1);//显示子程序 void dis_san(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1,uchar san);//闪烁显示子程序

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

8位数码管显示电子时钟c51单片机程序 /* 8位数码管显示时间格式 055000 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #includereg52.h 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}; //共阴极数码管09 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00 void delay(unsigned int cnt) {

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() { TMOD |=0x01; //定时器0 10ms inM crystal 用于计时

DS3231高精度时钟程序代码(单片机STC89c52RC与1602显示)

//DS3231,经测试,日期,时间,星期,温度可以用1602显示#in elude #in elude vintrin s.h> #defi ne uchar un sig ned char #defi ne uint un sig ned int #define yh 0x80 //第一行的初始位置 #defi ne er 0x80+0x40 // 第二行初始位置 sbit wr=P1A1; sbit rs=P1A。; sbit en=卩2人5; sbit SDA=P3A6; //模拟I2C数据传送位 SDA sbit SCL=P3A7; //模拟I2C时钟控制位 SCL sbit INT=P3A2;

sbit key1=P1A7; // 功能键,修改键 sbit key2=P3A4; // 上调键 sbit key3=P3A5; // 下调键 sbit RESET=P3A3; bit ack; // 应答标志位 #define DS3231 _WriteAddress 0xD0 // 器件写地址 #define DS3231 _ReadAddress 0xD1 // 器件读地址 #define DS3231 _SECOND 0x00 // 秒 #define DS3231 _MINUTE 0x01 // 分 #define DS3231 _HOUR 0x02 // 时 #define DS3231 _WEEK 0x03 // 星期#define DS3231 _DAY 0x04 // 日 #define DS3231 _MONTH 0x05 // 月#define DS3231 _YEAR 0x06 // 年 // 闹铃 1 #define DS3231 _SALARM1ECOND 0x07 // 秒#define DS3231 _ALARM1MINUTE 0x08 // 分#define DS3231 _ALARM1HOUR 0x09 // 时 #define DS3231 _ALARM1WEEK 0x0A // 星期 / 日 // 闹铃 2 #define DS3231 _ALARM2MINUTE 0x0b // 分 #define DS3231 _ALARM2HOUR 0x0c // 时 可编辑

相关文档
最新文档