数字时钟c语言程序

合集下载

数字时钟_89C52_单片机C语言程序

数字时钟_89C52_单片机C语言程序
/*列扫描控制 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】作为倒计时开始的标志 */
TH0 = (65536 - 10000) / 256; /*给定计时器高位赋予 初值=15536/256*/
TL0 = (65536 - 10000) % 256; /*给定计时器低位赋予 初值=15536%256 */
ET0 = 1; /*打开定时器外部终断0允许 ET1是中断器1的开关*/
P2 = C[4];
Delay(1);
P0 = Code[Msec%10]; /*第五位的数字显示【分】的【个】位 */
P2 = C[5];
Delay(1);
Delay(1);
P0 = 0x40; /*第六位符号【-】的显示 */
P2 = C[6];
Delay(1);
P2 = C[2];
Delay(1);
if(x/50==0)
P0 = 0x40; /*第三位符号【-】的显示 */
else
P0 = 0x00;
P2 = C[3];
Delay(1);
P0 = Code[min/10]; /*第四位的数字的显示【分】的【十】位 */
uchar month=7;
uchar month2;
uchar day=19;
uchar set1 = 1; /* set1=1 是调节 时分秒 set1=2时时调节 年月日 set=3时事调节闹钟 */

用c语言实现钟表

用c语言实现钟表
要使用 C 语言编写一个简单的钟表程序,你可以按照以下步骤进行:
1. 引入所需的头文件:你需要引入一些头文件来实现程序的功能,例如 stdio.h、stdlib.h、time.h 等。
2. 定义程序的数据结构:你可以定义一个结构体来表示钟表的时间,包括时、分、秒等字段。
3. 获取当前时间:使用 time 函数获取当前系统时间,并将其转换为时、分、秒等字段。
localTime->tm_sec);
22.
23.
// 暂停一秒钟
Байду номын сангаас
24.
sleep(1);
25. }
26.
27. return 0;
28. }
29. 这个程序会不断获取当前系统时间,并输出格式为"时:分:秒"的钟表界面。程序会每 秒钟更新一次时间,并在终端上显示。你可以根据需要进行适当的修改和扩展,例
time_t currentTime = time(NULL);
17.
struct tm *localTime = localtime(&currentTime);
18.
19.
// 输出钟表界面
20.
system("clear"); // 清屏(适用于 Linux 和 Mac)
21.
printf("%02d:%02d:%02d\n", localTime->tm_hour, localTime->tm_min,
7. 下面是一个简单的 C 语言实现钟表的代码示例:
8. c 复制代码
9. #include <stdio.h>
10. #include <stdlib.h>

C语言实现电子时钟程序

C语言实现电子时钟程序

C语⾔实现电⼦时钟程序本⽂实例为⼤家分享了C语⾔实现电⼦时钟程序的具体代码,供⼤家参考,具体内容如下Qt ⾥⾯运⾏#include<windows.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>typedef struct{int x;int y;}Point;time_t now;struct tm *pt, t1, t2;int printpoint(Point p){Point p1;p1.x = p.x + 2; p1.y = p.y + 4;gotoxy(p1.x, p1.y); printf("%c%c", 2, 2);gotoxy(p1.x, p1.y + 1); printf("%c%c", 2, 2);p1.y += 4;gotoxy(p1.x, p1.y); printf("%c%c", 2, 2);gotoxy(p1.x, p1.y + 1); printf("%c%c", 2, 2);return 0;}int print0(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);elseprintf("%c%4s%c", 2, " ", 2);}return 0;}int print1(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);printf("%5s%c", " ", 2);}return 0;}int print2(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%5s%c", " ", 2);elseprintf("%c", 2);}return 0;}int print3(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);elseprintf("%5s%c", " ", 2);}return 0;}int print4(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i<6) printf("%c%4s%c", 2, " ", 2);else if (i == 6)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else printf("%5s%c", " ", 2);}return 0;}int print5(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%c", 2);elseprintf("%5s%c", " ", 2);}return 0;}int print6(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%c", 2);elseprintf("%c%4s%c", 2, " ", 2);}return 0;}int print7(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0) printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2); else printf("%5s%c", " ", 2);}return 0;}int print8(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else printf("%c%4s%c", 2, " ", 2);}return 0;}int print9(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2); else if (i>0 && i<6)printf("%c%4s%c", 2, " ", 2);elseprintf("%5s%c", " ", 2);}return 0;}int clear(Point p){int i = 0;for (; i<13; i++)gotoxy(p.x, p.y + i); printf("%16s", " ");return 0;}int printtime(Point p, int n){int a, b;Point pp;a = n / 10,b = n % 10;pp.x = p.x + 8, pp.y = p.y;switch (a){case 0: print0(p); break;case 1: print1(p); break;case 2: print2(p); break;case 3: print3(p); break;case 4: print4(p); break;case 5: print5(p); break;}switch (b){case 0: print0(pp); break;case 1: print1(pp); break;case 2: print2(pp); break;case 3: print3(pp); break;case 4: print4(pp); break;case 5: print5(pp); break;case 6: print6(pp); break;case 7: print7(pp); break;case 8: print8(pp); break;case 9: print9(pp); break;}return 0;}int main(){Point phour, pmin, psec, point1, point2;phour.x = 9, pmin.x = 32, psec.x = 55;phour.y = pmin.y = psec.y = 7;point1.x = 25, point2.x = 49;point1.y = point2.y = 7;clrscr();textbackground(YELLOW); /* 设置背景颜⾊*/ textcolor(RED); /* 设置数字显⽰颜⾊*/now = time(0);pt = localtime(&now);t1 = *pt;printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);while (1){now = time(0);pt = localtime(&now);t2 = *pt;if (t2.tm_sec != t1.tm_sec){t1 = t2;clrscr();printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);}if (bioskey(1) == 0) continue;else exit(0);}return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

单片机数字钟万年历(c语言)

单片机数字钟万年历(c语言)

#include <REGX51.H>#include <ABSACC.h>#define Font_code XBYTE[0xefff] //字符码写地址#define reg_code XBYTE[0xdfff] //字位码写地址#define s_1_con_key P3_2#define m_1_con_key P3_3#define h_1_con_key P3_4#define w_1_con_key P3_5#define p1 P1sbit BELL=P1^0;//sbit p10=P1^0;//sbit p20=P1^1;//sbit p30=P1^2;//sbit p40=P1^3;//sbit p50=P1^4;//sbit p60=P1^5;//sbit p70=P1^6;//sbit p80=P1^7;//字型码const unsigned char seg_design[11]={0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x40,/*-*/};//字位码const unsigned char bit_design[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3,3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0} ;// 音阶频率表高八位code unsigned char FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;// 音阶频率表低八位code unsigned char FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};unsigned char bit_con;unsigned int ms_1_con; //毫秒计数器unsigned char s_1_con; //秒计数器unsigned char m_1_con; //分计数器unsigned char h_1_con=12;//时计数器unsigned char w_1_con=6; //周计时器unsigned char d_1_con=1;unsigned char mon_1_con=1;unsigned int y_1_con=2011;unsigned char s1; //秒计数器unsigned char m1; //分计数器unsigned char h1; //时计数器unsigned char Display_Buffer[8]; //显示缓冲区unsigned int k1=0;unsigned int k2=0;unsigned char timer0h,timer0l,time,led=1,j=0;unsigned char flagd=0;void delay_nms(unsigned int n);void Calculation_display(void);void time_set(void);void time_set1(void);void time_set2(void);void InitTimer0(void){TMOD = 0x01; // 方式1,16位计数器方式TH0 = 0xFC; //定时初值=65536-n n=1000,定时周期是1ms TL0 = 0x18;EA = 1; //开总中断使能ET0 = 1; //允许定时器T0溢出中断TR0 = 1; //T0 运行}void delay(unsigned char t){unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++){for(t2=0;t2<4000;t2++){;}}TR0=0;}void song(){TH0=timer0h;TL0=timer0l;TR0=1;delay(time);}void sing(){unsigned char k,i=0;time=1;while(time){if(k1==0) break;InitTimer0();Calculation_display();if(k2==0)time_set();else if(k2==1)time_set1();elsetime_set2();p1=~seg_design[8];k=sszymmh[i]+7*sszymmh[i+1]-1;timer0h=FREQH[k];timer0l=FREQL[k];time=sszymmh[i+2];i=i+3;song();}}void main(void){InitTimer0();while(1){Calculation_display();delay_nms(100);if(k2==0)time_set();else if(k2==1)time_set1();elsetime_set2();sing();k1=0;InitTimer0();}}void Timer0Interrupt(void) interrupt 1 using 1 {TH0 = 0xFC;TL0 = 0x18;ms_1_con++;//采用定时扫描方式bit_con++;if(bit_con > 7) bit_con = 0;reg_code = 0x00; //先消隐显示Font_code = Display_Buffer[bit_con];reg_code = bit_design[bit_con];if(k1==1){TR0=0;BELL=!BELL;TH0=timer0h;TL0=timer0l;TR0=1;}}void delay_nms(unsigned int n) //延时N ms{unsigned char a,b;unsigned int c;for(c=n;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void Calculation_display(void){unsigned char day;if(ms_1_con > 999) //1000ms定时到{ms_1_con = 0;s_1_con++;if(s_1_con > 59){s_1_con = 0;m_1_con++;if(m_1_con > 59){m_1_con = 0;h_1_con++;k1=1;if(h_1_con > 23){h_1_con = 0;w_1_con++;if(w_1_con>7)w_1_con=1;switch(mon_1_con){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 2:day=28;break;case 4:case 6:case 9:case 11:day=30;break;}d_1_con++;if(d_1_con>day){mon_1_con++;d_1_con=1;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}}}}}p1=~seg_design[w_1_con];if(k2==0){if(ms_1_con<500){Display_Buffer[2] = seg_design[10];Display_Buffer[5] = seg_design[10];}else{Display_Buffer[2] = !seg_design[10];Display_Buffer[5] = !seg_design[10];}Display_Buffer[6] = seg_design[s_1_con/10];//秒十位Display_Buffer[7] = seg_design[s_1_con%10]; //秒个位Display_Buffer[3] = seg_design[m_1_con/10]; //分十位Display_Buffer[4] = seg_design[m_1_con%10]; //分个位Display_Buffer[0] = seg_design[h_1_con/10]; //时十位Display_Buffer[1] = seg_design[h_1_con%10]; //时个位}if(k2==1){Display_Buffer[3] = seg_design[y_1_con%10]; //年个位Display_Buffer[2] = seg_design[(y_1_con/10)%10]; //年十位Display_Buffer[1] = seg_design[((y_1_con/100)%10)]; //年百位Display_Buffer[0] = seg_design[y_1_con/1000]; //年千位Display_Buffer[6] = seg_design[d_1_con/10]; //日十位Display_Buffer[7] = seg_design[d_1_con%10]; //日个位Display_Buffer[4] = seg_design[mon_1_con/10]; //月十位Display_Buffer[5] = seg_design[mon_1_con%10]; //月个位}if(k2==2){Display_Buffer[2] = seg_design[10];Display_Buffer[5] = seg_design[10];Display_Buffer[6] = seg_design[s1/10]; //秒十位Display_Buffer[7] = seg_design[s1%10]; //秒个位Display_Buffer[3] = seg_design[m1/10]; //分十位Display_Buffer[4] = seg_design[m1%10]; //分个位Display_Buffer[0] = seg_design[h1/10]; //时十位Display_Buffer[1] = seg_design[h1%10]; //时个位}if(s1==s_1_con&&m1==m_1_con&&h1==h_1_con)k1=1;}void time_set(void){unsigned char day;if(!s_1_con_key){s_1_con++;if(s_1_con > 59){s_1_con = 0;m_1_con++;if(m_1_con > 59){m_1_con = 0;h_1_con++;if(h_1_con > 23){h_1_con = 0;w_1_con++;if(w_1_con>7)w_1_con=1;d_1_con++;switch(mon_1_con){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 2:day=28;break;case 4:case 6:case 9:case 11:day=30;break;}if(d_1_con>day){mon_1_con++;d_1_con=1;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}}}}}if(!m_1_con_key){m_1_con++;if(m_1_con > 59){m_1_con = 0;h_1_con++;if(h_1_con > 23){h_1_con = 0;w_1_con++;if(w_1_con>7)w_1_con=1;d_1_con++;switch(mon_1_con){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 2:day=28;break;case 4:case 6:case 9:case 11:day=30;break;}if(d_1_con>day){mon_1_con++;d_1_con=1;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}}}}if(!h_1_con_key){h_1_con++;if(h_1_con > 23){h_1_con = 0;w_1_con++;if(w_1_con>7)w_1_con=1;d_1_con++;switch(mon_1_con){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 2:day=28;break;case 4:case 6:case 9:case 11:day=30;break;}if(d_1_con>day){mon_1_con++;d_1_con=1;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}}}if(!w_1_con_key){k2=1;}}void time_set1(void){unsigned char day;switch(mon_1_con){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;case 2:day=28;break;case 4:case 6:case 9:case 11:day=30;break;}if(!s_1_con_key){d_1_con++;w_1_con++;if(w_1_con>7)w_1_con=1;if(d_1_con>day){mon_1_con++;d_1_con=1;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}}if(!m_1_con_key){mon_1_con++;w_1_con=(w_1_con+day%7)%7;if(mon_1_con>12){y_1_con++;mon_1_con=1;}}if(!h_1_con_key){y_1_con++;if(y_1_con>9999){w_1_con=(w_1_con+365%7)%7;y_1_con=0;}}if(!w_1_con_key){k2=2;}}void time_set2(void){if(!s_1_con_key){s1++;if(s1>59)s1=0;}if(!m_1_con_key){m1++;if(m1>59)m1=0;}if(!h_1_con_key){h1++;if(h1>23)h1=0;}if(!w_1_con_key){k2=0;}}。

液晶显示数字时钟(C语言)

液晶显示数字时钟(C语言)

唐山学院毕业设计设计题目:多功能液晶显示数字时钟的设计与实现系别:班级:姓名:指导教师:2010年5月30 日多功能液晶显示数字时钟的设计与实现摘要数字时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。

另外,在生活和工农业生产中,也常常需要温度,这就需要数字时钟具有多功能性。

本设计主要为实现一款可正常显示时钟、日历、带有定时闹钟的多功能数字时钟。

本设计对当前数字时钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能数字时钟。

本设计采用STC89C52RC单片机芯片作为中央处理器,外接DS1302时钟芯片提供时钟日历信息,星期通过编程计算自动生成,并利用液晶显示屏LCD1602来显示时钟、日历、星期、闹钟等信息,通过按键来设置或校准相关信息,并通过+5V电源为此系统供电,测试电路完成所有功能后制成样机。

这种实现方法的优点是电路简单,性能可靠,实时性好,操作简单,编程容易。

该数字时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。

关键词:数字时钟单片机系统STC89C52RC DS1302 LCD1602Design and Implementation of Multi-functionLCD Digital ClockAbstractDigital clock is using electronic technology to clock electronic, digital, with the clock precision, small size and friendly interface, scalability and strong performance characteristics, is widely used to live and work among. In addition, living and industrial and agricultural production, are often required temperature, which requires digital clock with versatility.The key for the realization of a design can be displayed properly clock, calendar, alarm clock with multi-functional electronic time clock.This article discusses the development of digital clock means were compared and analyzed finally determine the function of using SCM technology digital clock. This design uses STC89C52RC single chip as the CPU, external clock DS1302 clock chip to provide calendar information, automatically generated by programming a week, and use LCD1602 LCD displays clock, calendar, week, alarm clock and other information, through the button to set or calibration information, and through the +5 V power supply for this system. When all of the features produced after the completion of prototype .This method provides the advantage of simple circuit,reliable performance, real-time, simple operation, easy programming.The digital clock can be applied to general life and work, can also be modified to improve performance,add new features to people's lives and work to bring more convenience.Keywords: Digital Clock ;Microcomputer System; STC89C52RC; DS1302 ;LCD1602目录1引言 (1)2基于单片机的数字时钟设计 (2)2.1主要芯片选择 (2)2.1.1 STC89C52RC单片机简介 (2)2.1.2 STC89C52RC引脚简介 (3)2.2时钟芯片DS1302 (4)2.2.1 DS1302简介 (5)2.2.2 DS1302引脚说明 (5)2.2.3 DS1302的片内寄存器 (7)2.3 LCD液晶显示器 (8)2.3.1液晶显示器LCD1602简介 (8)2.3.2 LCD的基本指令 (9)3数字时钟硬件电路设计 (11)3.1时钟电路设计 (11)3.2显示电路 (11)3.3按键电路设计 (12)3.4闹铃电路设计 (13)3.5复位电路设计 (14)3.6电源的设计 (14)3.6.1单相桥式整流电路介绍 (14)3.6.2变压器和整流二极管的选择 (15)3.6.3滤波电路 (15)3.6.4滤波电容的选择 (16)3.6.5稳压电路 (16)4系统的软件设计 (17)4.1 DS1302时钟模块 (17)4.1.1宏定义DS1302中寄存器地址 (17)4.1.2时钟芯片的单字节传送方式 (17)4.1.3是否写保护寄存器操作 (18)4.1.4时钟芯片的初始化 (18)4.1.5时钟停止/启动走时 (18)4.1.6数据信息的显示 (19)4.2 LCD显示模块部分 (19)4.2.1基本操作程序 (19)4.2.2 RAM地址映射图 (19)4.2.3状态字说明 (20)4.2.4数据指针设置 (20)4.2.5显示模式设置 (20)4.2.6初始化设置 (21)4.2.7其他设置 (21)4.3主程序模块 (21)4.3.1星期采用的算法 (21)4.3.2中断声明 (21)4.3.3校准时间函数 (22)4.3.4设置闹钟函数 (22)4.3.5 LCD显示程序设计 (22)4.3.6主函数 (22)5系统调试 (26)5.1软件调试 (26)5.1.1 Proteus 简介 (26)5.1.2 Keil 简介 (26)5.1.3 Proteus与Keil连接调试 (27)5.2硬件调试 (29)5.2.1焊接的注意事项 (29)5.2.2单片机电路调试 (29)5.2.3显示电路的调试 (29)5.2.4 DS1302电路调试 (30)5.2.5按键电路调试 (30)6结论 (31)谢辞 (32)参考文献 (33)附录一 (34)附录二 (35)附录三 (36)外文资料 (56)1引言随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。

c语言单片机数字钟程序

c语言单片机数字钟程序

#include<reg52.h>sbit ksec=P3^0; //定义端口,秒的调整按键对应p3.0sbit kmin=P3^1; //分的调整按键对应p3.1sbit khour=P3^2; //时的调整按键对应p3.2unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsigned int num=0,sec=0,min=0,hour=0;unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义数码管显示的0-9的代码void delay(unsigned int z){ //延时程序unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);//如果是12MHz晶振,就是110us对应z=1}void keyscan();void display();void main(){TMOD=0x01;//T0定时器,模式1定时,13位定时TH0=(65536-50000)/256; //定时1S的数据设置,定时50000个机器周期后中断一次TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;//开启总中断,允许T0中断,开启T0中断while(1){display();//显示keyscan();//读取按键}}void time0() interrupt 1{num++;//T0中断服务程序,定时中断一次后num加一TH0=(65536-50000)/256;TL0=(65536-50000)%256;//重装计数值,因为模式1是非自动重装的}void display(){if(num==20){num=0; //定时20次后sec加一,那应该是6MHz的晶振,机器周期为2us,50000*2us*20=1ssec++;if(sec==60){sec=0;min++;//到60s,min加一,sec清零if(min==60){min=0;hour++;//到60分,hour加一,分清零if(hour==24){hour=0;min=0;//到24小时则所有时间清零,新的一天从零时开始计时sec=0;}}}}secge=sec%10;//秒的个位,秒除以10的余数secshi=sec/10;//十位,秒整除10的商minge=min%10;minshi=min/10;hourge=hour%10;hourshi=hour/10;P2=0xfe;//1111 1110,0选通一位数码管,P0=table[secge];//送秒的各位显示delay(5);//延时一会儿P2=0xfd;//选通下一位数码管,1111 1101P0=table[secshi];//送秒的十位显示delay(5);P2=0xfb;//1111 1011,选通再下一位P0=0x40;//显示分与秒之间的那个点delay(5);P2=0xf7;//1111 0111,再下一位P0=table[minge];//分的个位delay(5);P2=0xef;//1110 1111P0=table[minshi];//分的十位delay(5);P2=0xdf;//1101 1111P0=0x40;//分与时间的点delay(5);P2=0xbf;//1011 1111P0=table[hourge];//小时的个位delay(5);P2=0x7f;//0111 1111P0=table[hourshi];//小时的十位delay(5);}void keyscan(){if(ksec==0){delay(10);//延时防抖动if(ksec==0)//这里应该按键上接地的,有按键按下就是0{sec++;//有秒对应的按键按下,则秒加一if(sec>=60)//秒数到60则清零sec=0;}while(ksec==0)//等待按键释放,display();}//不做别的操作,就一直显示,等待按键释放,防止一次按键多次操作if(kmin==0){delay(10);//分对应的按键if(kmin==0){min++;if(min>=60)min=0;}while(kmin==0)display();}if(khour==0){delay(10);//小时对应的按键if(khour==0){hour++;if(hour>=24)hour=0;}while(khour==0)display();}}。

数字时钟C程序及仿真

数字时钟C程序及仿真

数字时钟C程序及仿真-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN**************************************/#include <>unsigned char code SEG7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff,};unsigned short int tcount;//sbit set=P1^0;//sbit up=P1^1;//sbit down=P1^2;unsigned charDisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH;//结构体变量struct time{unsigned char second;unsigned char minute;unsigned char hour;}time1;//延时子程序void delay(k)unsigned int k;{unsigned char j;while((k--)!=0)for(j=0;j<125;j++);}//时钟调整子程序TimeUpDown(n,x,y)unsigned char n,x,y;{if(up==0){delay(50); //消除抖动if(up==0){n++;if(n==x)//上限越界显示为0n=0;while(up==0);}}if(down==0){delay(50);if(down==0){if(n==0)//下限越界显示为最大可显示n=y;elsen--;while(down==0);}}return n;//返回调整后的值} *///显示子程序void display(DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH) {// 日日日日日日// 1 2 3 4 5 6// hH hL mH mL sH sL// 01 02 04 08 10 20P2=0x00;P0=SEG7[DisSecondL]; //显示秒钟的个位P2=0x20;delay(3);P2=0x00;P0=SEG7[DisSecondH]; //显示秒钟的十位P2=0x10;delay(3);P2=0x00;P0=SEG7[DisMinutL]; //显示分钟的个位P2=0x08;delay(3);P2=0x00;P0=SEG7[DisMinutH]; //显示分钟的十位P2=0x04;delay(3);P2=0x00;P0=SEG7[DisHourL]; //显示小时的个位P2=0x02;delay(3);P2=0x00;if(DisHourH==0){;}else{P0=SEG7[DisHourH]; //显示小时的十位P2=0x01;delay(3);}}void main(){//unsigned char Flag;=40;=03;=05;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){display(DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH);if(set == 0) //设置标志位 Flag{delay(50);if(set == 0){TR0 = 0;Flag++;if(Flag > 3) //0:显示时间,1:小时调整,2:分钟调整,3:秒调整Flag = 0;}while(set == 0);}switch(Flag){case 0:TR0=1;display%10,10,%10,10,%10,10);break;case 1: //时钟小时调整TR0=0;=TimeUpDown,24,23);display(10,10,10,10,%10,10);break;case 2: //时钟分钟调整=TimeUpDown,60,59);display(10,10,%10,10,10,10);break;case 3: //时钟秒调整=TimeUpDown,60,59);display%10,10,10,10,10,10);break;//default:// break;}}}void t0(void) interrupt 1{TH0=(65536-50000)/256; TL0=(65536-50000)%256; tcount++;if(tcount==20){tcount=0;++;}if >=60){=0;++;}if >=60){=0;++;}if>=12){=1;}DisSecondL=%10;DisSecondH=10;DisMinutL=%10;DisMinutH=10;DisHourL=%10;DisHourH=10;}。

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

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

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

用 C 语言编写一个闹钟程序

用 C 语言编写一个闹钟程序

要用C 语言编写一个闹钟程序,你需要按照以下步骤进行:
包含必要的头文件:首先,你需要包含<time.h> 和<unistd.h> 两个头文件。

这两个头文件将为你提供时间和睡眠函数,这些函数是实现闹钟功能所必需的。

输入闹钟时间:接下来,你需要让用户输入闹钟的触发时间。

你可以使用scanf() 函数来获取用户输入。

计算睡眠时间:接下来,你需要计算出当前时间和闹钟触发时间之间的时间差,并使用睡眠函数等待该时间差。

你可以使用time() 函数获取当前时间,并使用difftime() 函数计算时间差。

你还可以使用sleep() 函数来等待相应的时间。

播放提醒声音:最后,你需要在闹钟触发时向用户播放一个提醒声音。

你可以使用system() 函数来执行一个系统命令,播放提醒声音。

示例代码如下:
#include <time.h>
#include <unistd.h>
#include <stdio.h>
int main() {
// 输入闹钟时间
int hour, minute;
printf("请输入闹钟时间(小时。

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

单片机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。

3、调整到正确时间后,按下确定键不放,同时再按一下设定键,将目前设定值送入时钟,使其开始从设定值计时。

c语言的时钟程序

c语言的时钟程序

c语言的时钟程序#include<graphics.h>#include<math.h>#include<dos.h>#define PI 3.1415926//屏幕中心的坐标(640X480模式下)#define mid_x 320#define mid_y 240int main(){ int graphdriver=DETECT,graphmode;int end_x,end_y;struct time curtime;float th_hour,th_min,th_sec;initgraph(&graphdriver,&graphmode,"C:\\TC2"); //初始化VGA屏幕模式setbkcolor(BLACK); //使用黑色的背景色while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序{ setcolor(GREEN); //把画笔设为绿色circle(mid_x,mid_y,180); //钟的外圆circle(mid_x,mid_y,150); //钟的内圆circle(mid_x,mid_y,1); //画出钟的圆心gettime(&curtime); //取得系统当前时间th_sec=(float)curtime.ti_sec*0.1047197551; //把秒针的角度化为弧度,为以后绘制时方便,下同th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0; //分针的弧度th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0; //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5//计算出时针的尾的坐标(时针长70)end_x=mid_x+70*sin(th_hour);end_y=mid_y-70*cos(th_hour);setcolor(RED);line(mid_x,mid_y,end_x,end_y); //用红色线画出时针//计算出分针坐标(分针长110)end_x=mid_x+110*sin(th_min);end_y=mid_y-110*cos(th_min);setcolor(RED);line(mid_x,mid_y,end_x,end_y); //用红色画出分针end_x=mid_x+140*sin(th_sec);end_y=mid_y-140*cos(th_sec);setcolor(RED);line(mid_x,mid_y,end_x,end_y); //同上,画出秒针,长为140 //画出钟盘上的刻度,刻度长20line(140,240,160,240); //9点对应的大刻度line(320,60,320,80); //12点对应的大刻度line(500,240,480,240); //3点的刻度line(320,420,320,400); //6点的刻度line(410,395.7,400,378.4); //5点line(475.7,330,458.4,320); //4点line(475.7,150,458.4,160); //2点line(410,84.3,400,101.6); //1点line(230,84.3,240,101.6); //11点line(164.3,150,181.6,160); //10点line(164.3,330,181.6,320); //8点line(230,395.7,240,378.4); //7点sleep(BLUE); //这里应该是打错,停止一秒,应为sleep(1000) cleardevice(); //清除屏幕上的显示}closegraph(); //关闭VGA屏幕,即返回文本方式return 0;}。

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