LED数字显示电子时钟源程序代码
电子时钟源代码
x2=98*sin(s/30*PI)+451; /*秒针的 x 坐标值*/ y2=200-98*cos(s/30*PI); /*秒针的 y 坐标值*/ line(451,200,x2,y2);
/*开始循环,直至用户按下 ESC 键结束循环*/ setcolor(12);/*淡红色*/ sound(500);/*以指定频率打开 PC 扬声器,这里频率为 500Hz*/ delay(700);/*发一个频率为 500Hz 的音调,维持 700 毫秒*/ sound(200);/*以指定频率打开 PC 扬声器,这里频率为 200Hz*/ delay(300);
/*绘制新的分针*/ m=t[0].ti_min; digitclock(446,318,digitmin(m)); /*在数字时钟中显示新的分钟值*/ x1=80*sin(m/30*PI)+451; y1=200-80*cos(m/30*PI); line(451,200,x1,y1); }
/*小时处理*/ if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)) {
count=1; } }
setcolor(15); digitclock(485,318,digitsec(s)+1);/*数字时钟增加1秒*/
setcolor(12); /*淡红色*/ x2=98*sin(s/30*PI)+451; y2=200-98*cos(s/30*PI); line(451,200,x2,y2);
基于单片机的LED点阵电子钟 C程序代码
//------------------------------定义头文件#include <reg51.h>//MCS-51单片机//------------------------------定义缩写字符#define uchar unsigned char#define uint unsigned int//------------------------------定义扬声器接口,低电平使能sbit Bell_Out = P1 ^ 5;//扬声器驱动//------------------------------定义DS18B20音sbit DQ = P1 ^ 6;//ds1820data(单总线)//------------------------------定义DS1302时钟接口sbit clock_clk = P3 ^ 5;//ds1302_clk(时钟线)sbit clock_dat = P3 ^ 6;//ds1302_dat(数据线)sbit clock_Rst = P3 ^ 7;//ds1302_Rst(复位线)//-----------------------------定义数据口#define Led_13 P0 //第1、3屏数据口#define Led_24 P2 //第2、4屏数据口#define Led_E P1 //74HC154的BCD列驱动(P1.0~P1.4)sbit Led_EA = P1 ^ 4;//显示列驱动器(74HC154)使能//-----------------------------独立键盘定义sbit Add_Key = P3 ^ 1;//前位加1键sbit Add2_Key = P3 ^ 0;//后位加1键sbit OK_Key = P3 ^ 2;//确定键sbit int_Key = P3 ^ 3;//中断入口//-----------------------------定义累加器A中的各位sbit a0 = ACC ^ 0;sbit a1 = ACC ^ 1;sbit a2 = ACC ^ 2;sbit a3 = ACC ^ 3;sbit a4 = ACC ^ 4;sbit a5 = ACC ^ 5;sbit a6 = ACC ^ 6;sbit a7 = ACC ^ 7;//------------------------------------定义全局变量bit txx = 0;uchar settime;//定义标志位uchar yy,mo,dd,xq,hh,mm,bn;//定义时间映射全局变量(专用寄存器)static uchar timecount = 0;//定义静态软件计数器变量static uchar pp = 0;//定义静态小时更新用数据变量//------------------------------------函数声明(按字母顺序排列)void Beep(void);void Beep_key(void);void Beep_set(void);void clearRAM (void);uchar clock_in(void);void clock_out(uchar dd);void Delay(int num);void DelayM(uint a);void display (void);void display_s (void);void Init_1302(void);void int1 (void);void putin (uchar u);uchar read_clock(uchar ord);void read_clockS(void);void Set_time(unsigned char sel);void setput (uchar k);void Timer0(void);void Timer0_Init(void);void write_clock(uchar ord, uchar dd);uchar DL (uchar);uchar DSS (void);//-----------------------------定义显示缓冲寄存器(32个字节全局变量)uchar Ledplay [35];////-----------------------------定义字符数据表单(二维数组)uchar code no[][10]={//-----------------------------------数字字符表{0x7E,0xFF,0x81,0x81,0xFF,0x7E,0},//0{0x82,0xFF,0xFF,0x80,0}, //1{0xC6,0xE7,0xB1,0x99,0x8F,0x86,0},//2{0x42,0xC3,0x89,0x89,0xFF,0x76,0},//3{0x30,0x28,0xA6,0xFF,0xFF,0xA0,0},//4{0x4F,0xCF,0x89,0x89,0xF9,0x71,0},//5{0x7E,0xFF,0x89,0x8B,0xFB,0x70,0},//6{0x03,0x03,0xF9,0xFF,0x07,0},//7{0x76,0xFF,0x89,0x89,0xFF,0x76,0},//8{0x0E,0xDF,0xD1,0x91,0xFF,0x7E,0},//9//-----------------------------------星期字符表{0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0},//一10{0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x40,0},//二{0x82,0x92,0x92,0x92,0x92,0x92,0x82,0x80,0},//三{0xFE,0xA2,0x9E,0x82,0x9E,0xA2,0xFE,0},//四{0x80,0x89,0xFF,0x89,0x89,0x89,0xF9,0x80,0},//五{0x88,0x68,0x38,0x0E,0x38,0x68,0x88,0},//六{0xFE,0x92,0x92,0x92,0x92,0xFE,0},//日10+6//-----------------------------------特殊字符表{0x6C,0x6C,0},//“:”17{0x18,0x18,0x18,0x18,0},//“-”18{0x06,0x06,0x78,0xFC,0x84,0x84,0x84,0x80,0},//“oC”19{0x02,0x8E,0xFC,0xFC,0x8E,0x02,0},//“Y”(在调时时表示年)20{0x80,0x7E,0x15,0x15,0x95,0xFF,0},//“月”21{0xFE,0x92,0x92,0x92,0x92,0xFE,0}//“日”22};//-----------------------------------开机画面,显示“DYDIY”uchar code dydiy[]={//显示“DYDIY”0x82,0xFE,0xFE,0x82,0xFE,0x7C,0,0x02,0x8E,0xFC,0xFC,0x8E,0x02,0,0x82,0xFE,0xFE,0x82,0xFE,0x7C,0,0x82,0xFE,0xFE,0x82,0,0x02,0x8E,0xFC,0xFC,0x8E,0x02,0,0x99};//---------------------------------------延时函数2uS/次void Delay(int num){for (;num>0;num--);}//---------------------------------------延时函数1MS/次void DelayM(unsigned int a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
电子时钟工具的程序设计及代码示例
电子时钟工具的程序设计及代码示例为满足现代生活的需求,电子时钟成为人们生活中的常见工具。
除了具备实时显示时间的功能外,电子时钟还可以根据用户需求进行各种定制,如显示日期、倒计时、闹钟等功能。
本文将探讨电子时钟的程序设计方法,并提供一个简单的代码示例。
一、程序设计方法在进行电子时钟的程序设计前,我们需要确定以下几个关键因素:1. 使用的编程语言:根据实际情况选择合适的编程语言,如C++、Java、Python等。
2. GUI框架:确定使用什么图形界面框架,如Qt、Tkinter等。
3. 实时更新:确定时间的实时更新方式,可以利用计时器、循环等方式进行时间更新。
4. 用户交互:考虑用户是否需要与电子时钟进行交互,如设置闹钟、选择日期等。
二、代码示例以下是一个基于Python和Tkinter的电子时钟代码示例,代码注释中详细说明了每个函数的功能和实现方法:```pythonimport tkinter as tkfrom datetime import datetimedef update_time():# 获取当前时间current_time = datetime.now().strftime("%H:%M:%S")# 更新时间标签time_label.config(text=current_time)# 每隔1秒更新一次时间time_label.after(1000, update_time)# 创建窗口window = ()window.title("电子时钟")# 创建时间标签time_label = bel(window, font=("Arial", 100), bg="white") time_label.pack(pady=50)# 更新时间update_time()# 运行窗口主循环window.mainloop()```以上代码创建了一个简单的窗口,使用标签实时显示当前时间。
实时电子闹钟52单片机源代码
实时电子闹钟功能:可以在液晶上显示时间星期日期,并按秒实时更新,具有闹钟设定及到时闹钟报警提示功能,闹钟响铃时按任意键可以取消响铃,拓展了四个按键,用于功能选择,数值增大或减小及闹钟查看,每次按键均会有短“滴”声,断电时间不停,再次上电仍将准确显示在液晶上照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟实时电子闹钟程序#include <reg52.h>#define uchar unsigned char#define uint unsigned int//按键sbit s1=P3^4; //设置sbit s2=P3^5; //减sbit s3=P3^6; //增sbit s4=P3^7; //闹钟sbit beep=P2^4; //蜂鸣器//1602位声明(实验板)sbit rs1602=P2^5;sbit rw1602=P2^6;sbit en1602=P2^7;/*uchar code table0[9]={"2010-4-13"};uchar code table1[8]={"11:03:05"};*///定义全局变量uchar shi,fen,miao,nian,yue,ri,week,s1num,num,flag,flag_di,flag1,amiao,afen,ashi;//延时x*1msvoid delay(uint x){uint a,b;for(a=0;a<x;a++)for(b=0;b<63;b++);}//转换函数uchar Convert(uchar In_Date){uchar i,Out_Date=0,temp=0;for(i=0;i<8;i++){temp=(In_Date>>i)&0x01;Out_Date|=(temp<<(7-i));}return Out_Date;}//1602写操作//写指令void write1602com(uchar com){rs1602=0;rw1602=0;en1602=0;P0=0xff;P0=Convert(com);delay(2);en1602=1;delay(2);en1602=0;delay(2);rs1602=1;}//写数据void write1602data(uchar adata) {rs1602=1;rw1602=0;en1602=0;P0=0xff;P0=Convert(adata);delay(2);en1602=1;delay(2);en1602=0;delay(2);rs1602=0;}//1602初始化设置void init_1602(){rs1602=0;rw1602=0;en1602=0;write1602com(0x38);write1602com(0x0c);write1602com(0x06);write1602com(0x01);write1602com(0x80);//外部中断EA=1;EX0=1;IT0=1;//闹钟标志位flag1=0;flag=0;flag_di=1;s1num=0;}//在1602中显示时分秒void lcd_sfm(uchar add,uchar adata){uchar shiwei,gewei;shiwei=adata/10;gewei=adata%10;write1602com(0x80+0x40+add); //在高位停留// delay(10);write1602data(shiwei+0x30);write1602data(gewei+0x30);}//在1602中显示年月日void lcd_nyr(uchar add,uchar adata){uchar shiwei,gewei;shiwei=adata/10;gewei=adata%10;write1602com(0x80+add); //在高位停留// delay(10);write1602data(shiwei+0x30);write1602data(gewei+0x30);}//1602时钟横杠等字符的显示void lcd1602showsign(){lcd_nyr(0,20);write1602com(0x80+4);write1602data('-');write1602com(0x80+7);write1602data('-');write1602com(0x80+0x40+2);write1602data(':');write1602com(0x80+0x40+5);write1602data(':');}//DS12887部分程序//位申明sbit ds12887_ds=P2^3;sbit ds12887_rw=P2^2;sbit ds12887_as=P2^1;sbit ds12887_cs=P2^0;sbit ds12887_irq=P3^2;//ds12887写数据及指令操作void ds12887_write(uchar add,uchar adata) {ds12887_as=0;ds12887_ds=1;ds12887_rw=1;ds12887_cs=0;ds12887_as=1;P1=add;ds12887_as=0;ds12887_rw=0;P1=adata;ds12887_rw=1;ds12887_as=1;}//ds12887读数据操作uchar ds12887_read(uchar add){uchar k;ds12887_ds=1;ds12887_rw=1;ds12887_as=1;ds12887_cs=0;P1=add;ds12887_as=0;ds12887_ds=0;P1=0xff;k=P1;ds12887_ds=1;ds12887_cs=1;ds12887_as=1;return k;}//设置ds12887初始时间void set_time(){ds12887_write(0x00,50); //secondds12887_write(0x02,59); //minuteds12887_write(0x04,23); //hourds12887_write(0x06,3); //dayds12887_write(0x07,16); //dateds12887_write(0x08,4); //monthds12887_write(0x09,10); //year}//闹钟滴滴响声void didi(){beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;}//ds12887初始化void init_ds12887(){ds12887_write(0x0a,0x20);ds12887_write(0x0B,0x26);//SET置1还是置0??set_time();}//闹钟设定void set_alarm(uchar hour,uchar minute,uchar second) {ds12887_write(1,second);ds12887_write(3,minute);ds12887_write(5,hour);}//读取闹钟数据void read_alarm(){amiao=ds12887_read(1);afen=ds12887_read(3);ashi=ds12887_read(5);}//显示星期void show_week(){switch(week){case 1:write1602com(0x80+11);write1602data('M');write1602data('O');write1602data('N');break;case 2:write1602com(0x80+11);write1602data('T');write1602data('U');write1602data('S');break;case 3:write1602com(0x80+11);write1602data('W');write1602data('E');write1602data('N');break;case 4:write1602com(0x80+11);write1602data('T');write1602data('H');write1602data('U');break;case 5:write1602com(0x80+11);write1602data('F');write1602data('R');write1602data('I');break;case 6:write1602com(0x80+11);write1602data('S');write1602data('A');write1602data('T');break;case 7:write1602com(0x80+11);write1602data('S');write1602data('U');write1602data('N');break;}}//清除设置星期时的数字型显示void clearnumofweek(){write1602com(0x80+14);write1602data(' ');write1602data(' ');}//按键扫描void keyscan(){if(flag_di==0){if((s1==0)||(s2==0)||(s3==0)||(s4==0)) {delay(5);if((s1==0)||(s2==0)||(s3==0)||(s4==0)) {while(!(s1&&s2&&s3&&s4));didi();flag_di=1;}}// flag_di=1;}if(s1==0){delay(10);if(s1==0){s1num++;if(flag1==1){if(s1num==4){s1num=1;// write1602com(0x80+0x40+7);// write1602com(0x0f);}}// s1num++;flag=1;while(!s1);beep=0;delay(50);beep=1;switch(s1num){case 1:write1602com(0x80+0x40+7);write1602com(0x0f);break;case 2:write1602com(0x80+0x40+4);write1602com(0x0f);break;case 3:write1602com(0x80+0x40+1);write1602com(0x0f);break;case 4:write1602com(0x80+15);write1602com(0x0f);break;case 5:write1602com(0x80+9);write1602com(0x0f);break;case 6:write1602com(0x80+6);write1602com(0x0f);break;case 7:write1602com(0x80+3);write1602com(0x0f);break;case 8:ds12887_write(0x00,miao); //secondds12887_write(0x02,fen); //minuteds12887_write(0x04,shi); //hourds12887_write(0x06,week); //dayds12887_write(0x07,ri); //dateds12887_write(0x08,yue); //monthds12887_write(0x09,nian); //year// delay(100);flag=0;s1num=0;break;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);beep=0;delay(50);beep=1;switch(s1num){case 1:miao++;if(miao==60)miao=0;lcd_sfm(6,miao);write1602com(0 x80+0x40+7);break;case 2:fen++;if(fen==60)fen=0;lcd_sfm(3,fen);write1602com(0 x80+0x40+4);break;case 3:shi++;if(shi==24)shi=0;lcd_sfm(0,shi);write1602com(0 x80+0x40+1);break;case 4:week++;if(week==8)week=1;lcd_nyr(14,week);write1602com(0 x80+15);break;case 5:ri++;if(ri==32)ri=1;lcd_nyr(8,ri);write1602com(0break;case 6:yue++;if(yue==13)yue=1;lcd_nyr(5,yue);write1602com(0 x80+6);break;case 7:nian++;if(nian==100)nian=0;lcd_nyr(2,nian);write1602com(0 x80+3);break;}}}if(s3==0){delay(5);if(s3==0){while(!s3);beep=0;delay(50);beep=1;switch(s1num){case 1:miao--;if(miao==-1)miao=59;lcd_sfm(6,miao);write1602com(0 x80+0x40+7);break;case 2:fen--;if(fen==-1)fen=59;lcd_sfm(3,fen);write1602com(0 x80+0x40+4);break;case 3:shi--;if(shi==-1)shi=23;lcd_sfm(0,shi);write1602com(0 x80+0x40+1);break;case 4:week--;if(week==0)week=7;lcd_nyr(14,week);write1602com(0 x80+15);break;case 5:ri--;if(ri==0)ri=31;lcd_nyr(8,ri);write1602com(0 x80+9);break;case 6:yue--;if(yue==0)yue=12;lcd_nyr(5,yue);write1602com(0 x80+6);break;case 7:nian--;if(nian==-1)nian=99;lcd_nyr(2,nian);write1602com(0 x80+3);break;}}}if(s4==0){delay(5);if(s4==0){// while(!s4);beep=0;delay(50);beep=1;num++;while(!s4);beep=0;delay(50);beep=1;// flag1=1;// flag1=~flag1;if(num==1)// if(flag1==1) //设置闹钟{flag1=1;write1602com(0x80+0x40+7);write1602com(0x0f);read_alarm();miao=amiao;fen=afen;shi=ashi;write1602com(0x80+0x40+9);write1602data('D');write1602data('i');// write1602com(0x80+0x40+7);// write1602com(0x0f);lcd_sfm(0,ashi);lcd_sfm(3,afen);lcd_sfm(6,amiao);}// else //退出闹钟设置,并把设置的时间输入进DS12C887中if(num==2){// delay(50);num=0;s1num=0;write1602com(0x80+0x40+9);write1602data(' ');write1602data(' ');// write1602com(0x0c);// ds12887_write(1,miao);// ds12887_write(3,fen);// ds12887_write(5,shi);set_alarm(shi,fen,miao);flag1=0;flag=0;}}}}}void main(){/*uchar i;init_1602();for(i=0;i<9;i++){write1602data(table0[i]);delay(5);}delay(10);write1602com(0x80+0x40);for(i=0;i<8;i++){write1602data(table1[i]);delay(5);}while(1);*/init_1602();lcd1602showsign();init_ds12887();while(1){keyscan();if(flag_di==0){// delay(100);didi();// delay(200);// flag_di=1;}// delay(10);if((flag==0)&&(flag1==0)){keyscan();// delay(10);shi=ds12887_read(0x04);fen=ds12887_read(0x02);miao=ds12887_read(0x00);nian=ds12887_read(0x09);yue =ds12887_read(0x08);ri =ds12887_read(0x07);week=ds12887_read(0x06);lcd_sfm(0,shi);lcd_sfm(3,fen);lcd_sfm(6,miao);lcd_nyr(2,nian);lcd_nyr(5,yue);lcd_nyr(8,ri);// lcd_nyr(14,week);show_week();clearnumofweek();}}}void exter0() interrupt 0{uchar c;flag_di=0;c=ds12887_read(0x0c);}。
LED数码管时钟程序
delay(10);
P2=duma[hour_l];
P0=wema[1];
delay(10);
}
//---------------------主函数--------------------------------
/*void alarm_clock() //闹钟子函数-变频发声
LED数码管时钟程序
/***使用定时器方式,数码管显示24小时“00-00-00”(增加进入对时功能)
P1为按键,P2为段选,P0为位选,{闹钟暂时不可调待完善})***/
#include <reg52.h>
#define uchar unsigned char /*宏定义 */
#define uint unsigned int /*宏定义 */
uchar hour,hour_h,hour_l; /*定义小时,小时的高位,小时的低位*/
uchar min,min_h,min_l; /*分*/
uchar sec,sec_h,sec_l; /*秒*/
uchar int_num; /*定时溢出作用标号*/
sbit key_secadd=P1^1; /*定义了 p1.1为秒增1键,用在调时中断里*/
sbit bell=P1^5; //小喇叭
void delay(uchar time); /*延时子函数声明*/
void display(); /*显示子函数声明*/
void inter_init(); /*定时器初始化子函数声明*/
void time24();
/****专用数码管显示表***/
TL0=(65535-50000)%256;
6位LED时钟设计的源程序清单
6源程序清单(1)参考汇编程序;************************************;;课程设计程序:单片机时钟;;*************************************;;***************************设计说明**********************;;以下程序能用于24小时计时,能作为秒表使用,能定时闹铃1min(也可关),;能整点报时,能倒计时定时。
使用方法:开机后在00:00:00 起开始计时,;(1)长按P1.0进入调分状态:分单元闪烁,按P1.0加l,按P1.1减1。
;再长按P1.0进入时调整状态,时单元闪烁,加减调整同调分,长按P1.0退出调整状态。
;(2)按下P1.1进入秒表状态:按P1.2暂停,再按P1.2秒表清零,再按P1. 2秒表;又启动,按P1.1退出秒表回到时钟状态。
;(3)按P1.3进入设定闹时状态:00:00:--,;可进行分设定,按P1.2分加l,再按P1.3为时调整.00:00:--,按P1.2时加1,;按P1.1闹铃有效,显示为00:00:--,再按P1.1闹铃无效(显示00:00:--,),;按P1. 3调闹钟结束。
在闹铃时可按P1.3停闹,不按闹铃响1分钟。
按P1.4进入倒计时;定时模式.按P1.5进行分十位调整(加1),按P1.6进行分个位加l,按Pl.4倒计时;开始,当对间为0时停止倒计时,并发声提醒,倒计时过程中按P1.4可退回到;正常时钟状态,定时器T0、T1溢出周期为50ms,T0为秒计数用,T1为调整时闪烁;及秒表定时用。
P1.0、P1.1、P1.2、P1.3为调整按钮,P0口为字符输出口,;P2为扫描口.P3. 7为小喇叭口.采用共阳显示管。
50H~55H为闹钟定时单元,;60H-- 65H为秒表计时单元.70H~75H为显示时间单元,76H~79H为分时计时单元。
;03H标志=0时钟状态,03H= ls;05H=0,不闹铃,05H=1要闹铃;;07H每秒改变一次,用作间隔呜叫。
AT89C51数码管电子时钟源代码
while(!P32); Delay_ms(10); while(!P32); ring++; if(ring==2)
ring=0; } } if (ring==1) { if((clocksec==sec)&&(clockmin==min)&&(clockhour==hour)) {
flag1=0; sec=0; } } } switch (flag1) { case 0:
if(P30==0) {
Delay_ms(10); if(P30==0) {
while(!P30); Delay_ms(10); while(!P30); sec++; if(sec==60)
sec=0; } }
码 0--9
//数据初始化 void VarInit(void) {
num = 0; sec = 0; min = 0; hour = 0;
//初始化时间
num1=0; sec1=0; min1=0;
//初始化秒表
clocksec=0; clockmin=0; clockhour=0;
//初始化闹钟时间
for(k=123;k>0;k--); }
//计时器初始化 void TimerInit(void) {
EA=1; ET1=1; EX1=1; IT1=1; TMOD=0x10; TH1=0xd8; TL1=0xf0; TR1=1; }
//开总中断
//选择计数器工作方式,选为方式 1,16 位计数器 //装入高八位数 //低八位 //计数器开始工作
} } }
//设置闹钟 void AlarmClock() {
简单实用的LED时钟控件源码
简单的LED时钟控件下面是该控件的源码/**//////////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __MFC_EXT_DIGITCLOCK_H__#define __MFC_EXT_DIGITCLOCK_H__// EDClock.h : header file//#define IntegerCount 3#define DecimalCount 5//4/**//////////////////////////////////////////////////////////////////////////////// CDigitDisplayer windowclass CDigitDisplayer : public CStatic...{// Constructionpublic:CDigitDisplayer();virtual ~CDigitDisplayer();// Attributespublic:static COLORREF origin;// Operationspublic:COLORREF GetColor() const ...{ return m_color;}COLORREF SetColor(COLORREF color);double m_number;void DisplayDigit(double number);void GetDigit(double number);// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CDigitDisplayer)protected:virtual void PreSubclassWindow();//}}AFX_VIRTUAL// Implementationpublic:// Generated message map functionsprotected://{{AFX_MSG(CDigitDisplayer)afx_msg BOOL OnEraseBkgnd(CDC* pDC);afx_msg void OnPaint();afx_msg void OnSize(UINT nType, int cx, int cy);//}}AFX_MSGprivate:COLORREF m_color;UINT m_w;UINT m_h;BITMAP m_bm;HBITMAP m_hBitmap[13];UINT m_nTimer;int m_digit[10];void Output(UINT digit, UINT pos);DECLARE_MESSAGE_MAP()};/**////////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCA TION}}// Microsoft Developer Studio will insert additional declarations immediately before the previous line.#endif // __MFC_EXT_DIGITCLOCK_H__//// Author: Xie Jingwei, Chinese Spell: 谢敬伟// Email to me, jw_xie@// A digital clock control, :-)//// Usage: See the header, just simple// Please Note: Make sure ADD the 12 bitmaps to your project, and// sort the ID to correct order. I used IDB_BITMAP1 to IDB_BITMAP12// side by side. See following://// Digit: ID V ALUE// 0 IDB_BITMAP1 100// 1 IDB_BITMAP2 101// 2 IDB_BITMAP3 102// 3 IDB_BITMAP4 103// 4 IDB_BITMAP5 104// 5 IDB_BITMAP6 105// 6 IDB_BITMAP7 106// 7 IDB_BITMAP8 107// 8 IDB_BITMAP9 108// 9 IDB_BITMAP10 109// : IDB_BITMAP11 110// IDB_BITMAP12 111//// There are three properties.// face color <-----> SetColor();// style <-----> SetStyle();// alarm mode <----> SetAlarm();/**///////////////////////////////////////////////////////////////////////////////// EDClock.cpp : implementation file//数码管显示#include "stdafx.h"#include "resource.h"#include "DigitDisplayer.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// The resource bitmap face color//static COLORREF origin;COLORREF CDigitDisplayer::origin = RGB(255, 0, 0);/**//////////////////////////////////////////////////////////////////////////////// CDigitDisplayerCDigitDisplayer::CDigitDisplayer()...{m_color = origin;for(int i = 0; i< 13; i++) ...{//创建数码显示的位图HBITMAP temp = (HBITMAP)::CreateMappedBitmap(AfxGetApp()->m_hInstance, i+IDB_BITMAP1, 0, NULL, 0);//创建合适的位图m_hBitmap[i] = (HBITMAP)::CopyImage( temp, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG | LR_COPYDELETEORG);//将位图存入缓存以备显示}for(i=0;i<8;i++) m_digit[i]=0;m_number=0;}CDigitDisplayer::~CDigitDisplayer()...{for(int i = 0; i< 12; i++) ...{if(m_hBitmap[i])::DeleteObject(m_hBitmap[i]);//清空缓存}}BEGIN_MESSAGE_MAP(CDigitDisplayer, CStatic)//{{AFX_MSG_MAP(CDigitDisplayer)ON_WM_ERASEBKGND()ON_WM_PAINT()ON_WM_SIZE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/**//////////////////////////////////////////////////////////////////////////////// CDigitDisplayer message handlersvoid CDigitDisplayer::PreSubclassWindow()...{::GetObject(m_hBitmap[0], sizeof BITMAP, &m_bm);CStatic::PreSubclassWindow();}void CDigitDisplayer::OnPaint() //设置数码宽度和高度...{CPaintDC dc(this); // device context for paintingCRect rectClient;GetClientRect(&rectClient);m_h = rectClient.Height();m_w = rectClient.Width()/(IntegerCount+DecimalCount+2);DisplayDigit(m_number);}BOOL CDigitDisplayer::OnEraseBkgnd(CDC* pDC) //给数码显示准备无效区域...{// TODO: Add your message handler code here and/or call defaultCBrush brush;brush.CreateSolidBrush(::GetSysColor(COLOR_WINDOWTEXT) );CBrush* pOldBrush = pDC->SelectObject(&brush);CRect rectClient;GetClientRect(&rectClient);pDC->PatBlt(0, 0, rectClient.Width(), rectClient.Height(), PA TCOPY);pDC->SelectObject(pOldBrush);return CStatic::OnEraseBkgnd(pDC);}void CDigitDisplayer::Output(UINT digit, UINT pos)//数字输出...{// draw the bitmapCClientDC dc(this);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap* pBitmap = CBitmap::FromHandle( m_hBitmap[digit] );CBitmap* pOldBitmap = dcMem.SelectObject(pBitmap);dc.StretchBlt(m_w*pos, 0, m_w, m_h,&dcMem, 0, 0, m_bm.bmWidth, m_bm.bmHeight, SRCCOPY);dcMem.SelectObject(pOldBitmap);dcMem.DeleteDC();}COLORREF CDigitDisplayer::SetColor(COLORREF color)//显示数字的颜色设置,若是红色,则改为显示时的绿色。
单片机 电子钟LED显示汇编程序
硬件电路:
程序 SEC EQU R0 MIN EQU R1 HOUR EQU R2 DING EQU R3 ORG 00H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0030H MAIN: MOV SEC,#0 MOV MIN,#0 MOV HOUR,#12 MOV DPTR,#TAB MOV TMOD,#01H MOV TH0,#9EH MOV TL0,#58H SETB EA SETB ET0 SETB TR0
;计时够 1 分继续,否则返回
MOV SEC,#0 INC MIN CJNE MIN,#60,RE_T MOV MIN,#0 INC HOUR CJNE HOUR,#24,RE_T MOV HOUR,#0
;计时够 24 小时继续,否则返回
;定时中断跳转
;秒初值 ;分初值 ;时初值
;设定时器 0 为方式 1 ;设定时器初值
LOOP: MOV A,SEC ;秒显示 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A MOV P2,#0FDH LCALL DELAY MOV P2,#0FFH MOV A,B MOVC A,@A+DPTR MOV P1,A MOV P2,#0FEH LCALL DELAY MOV P2,#0FFH MOV A,#10 MOVC A,@A+DPTR MOV P1,A MOV P2,#0FBH LCALL DELAY MOV P2,#0FFH MOV A,MIN MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A MOV P2,#0EFH LCALL DELAY MOV P2,#0FFH MOV A,B MOVC A,@A+DPTR MOV P1,A MOV P2,#0F7H LCALL DELAY MOV P2,#0FFH MOV A,#10 MOVC A,@A+DPTR MOV P1,A
电子钟源代码
if(DOWN_KEY)key_new=KEY_DOWN; //DOWN键按下
if(UP_KEY)key_new=KEY_UP; //UP键按下
if(key_new==key_old) //如果按键按下长于10ms
}
}
#include "LED.H"
void delayXms(unsigned int x) //延迟x毫秒函数
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<130;j++);
}
code unsigned char LED_TAB[]=
{
LED_BIT=0xFF; //消隐
LED_SEGMENT=LED_TAB[disp_buff[i]]; //段码输出
LED_BIT=~temp_bit; //位选输出
temp_bit<<=1; //修改位选
{
return; //返回
}
else //如果上次有按键按下
{
if(key_pressed_time>100) //按键时间超过一秒,长按键码
}
key_old=key_new; //保存本次按键值
}
}
#include "timer.h"
#include "main.h"
#include "keyboard.h"
#include "led.h"
unsigned char display_buffer[6]; //显示缓冲区
LED数字显示电子时钟源程序代码
LED数字显示电子时钟源程序代码LED数字显示电子时钟源程序代码程序:(注已完全经过调试,达到预期目的)#include#define uchar unsigned char#define uint unsigned intuchar count=0;sbit LED=P1^0;uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0;void delay(uint i) //延迟函数{uint j;for(;i>0;i--)for(j=124;j>0;j--);}void init(){ET0=1;TMOD=0x51; //选定定时器0,1和中断0,1TH0=(65536-25000)/256;TL0=(65536-25000)%256; //设定时器0时间为250ms一次ET1=1;TH1=0xff;TL1=0xff; //定时器1为中断EX0=1;IT0=1; //中断0开IT1=1; //中断1开TR0=1; //定时器0开TR1=1; //定时器1开EA=1; //总中断开}void display() //时钟显示函数{P0=tab[hour/10%10];P2=0xfe;delay(1);P0=tab[hour%10];P2=0xfd;delay(1);P0=tab[fen/10%10];P2=0xfb;delay(1);P0=tab[fen%10];P2=0xf7;delay(1);P0=tab[miao/10%10];P2=0xef;delay(1);P0=tab[miao%10];P2=0xdf;delay(1);}void main() //主函数{init();while(1){display();}}void T0_int() interrupt 1 //定时器0函数{TH0=(65536-25000)/256;TL0=(65536-25000)%256;count++;if(count==20){count=0;miao= miao +1;LED=~LED;if(sec==60){miao=0;fen= fen +1;if(fen ==60){fen =0;hour=hour+1;if(hour==24)hour=0;}}}}void T1_int() interrupt 3 //定时器1函数控制秒针加1 {TH1=0xff;TL1=0xff;miao=miao+1;if(miao ==60)miao =0;}void I1_int() interrupt 2 //中断1函数控制按键分针加1 { EX0=0;fen= fen +1;if(fen ==60)fen =0;EX0=1;}void I0_int() interrupt 0 //中断函数0控制按键时针加1 { EX1=0;hour=hour+1;if(hour==24)hour=0;EX1=1;}。
基于C语言的Led 数码管显示数字钟
目录1.引言 (1)1.1. 编写目的: (1)1.2. 背景 (1)1.3. 定义 (2)1.4. 参考资料 (4)2.总体设计 (4)2.1. 开发与运行环境 (4)2.2. 硬件功能描述 (4)2.3. 硬件结构 (5)3.硬件模块设计 (9)3.1. 描述 (9)3.2. 功能 (12)4.嵌入式软件设计 (13)4.1. 流程逻辑 (14)4.2. 程序代码 (17)5.经验总结 (29)6.附录 (34)1.引言1.1编写目的(1)巩固和提高学过的基础理论和专业知识;(2)提高运用所学专业知识进行独立思考和综合分析、解决实际问题的能力;(3)培养掌握正确的思维方法和利用软件和硬件解决实际问题的基本技能;(4)增强对实际电路的认识,掌握分析处理方法,进行调试、设计等基本技能的训练,使之具有一定程度的实际工作能力。
(5)通过设计数字电子钟,了解电子钟的工作原理和内部构造。
(6)学会系统(模块)的测试方法,并根据完整的测试数据对系统(模块)的性能指标做出分析和评价;1.2背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高。
目前,单片机正朝着高性能和多品种方向发展,发展趋势将进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
因此,本设计报告在Keil vision2环境下调试与编写程序,在利用proteus软件进行仿真,最终设计出PCB,制作出led数码管显示的数字钟。
单片机电子钟的完整源程序12m晶振
单片机电子钟的完整源程序12m晶振单片机电子钟的完整源程序12m晶振.txt不要放弃自己~ -------(妈妈曾经这样对我说,转身出门的一刹那,我泪流满面,却不想让任何人看见~) 看到这一句小编也心有感触,想起当初离家前往几千里外的地方的时候,妈妈也说过类似的话,但是身为男儿,必须创出一片天,才能报答父母的养育之恩~~ #include <AT89X51.H> #define uchar unsigned char#define uint unsigned intsbit key11=P3^3;sbit key12=P3^4;sbit key13=P3^5;sbit led14=P1^4;sbit led15=P1^5;unsigned char codetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x40,0x79 ,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//unsigned char codetable[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,00 8H,05EH,082H,042H,054H,041H,001H,05AH,000H,040H};//我自己板子的字库uchar hou1,hou2,min1,min2,flag;uchar i,j,k,l;uint tt,tt2;void init();void keyscan();void count();void display(uchar,uchar,uchar,uchar);void delay(uint);main(){init();while(1){while(flag==0)//时钟运行状态{keyscan();count();display(hou1,hou2,min1,min2); if(i==k&&j==l){led14=0;} if(tt%20==15)led15=0;if(tt%20==19)led15=1;}while(flag==1)//时钟分钟设定状态{TR0=0;keyscan();count();display(hou1,hou2,min1,min2); }while(flag==2)//时钟小时设定状态{keyscan();count();display(hou1,hou2,min1,min2); }while(flag==3)//闹钟分钟设定状态{keyscan();count();display(hou1,hou2,min1,min2); }while(flag==4)//闹钟小时设定状态 {keyscan();count();display(hou1,hou2,min1,min2); }}}void init(){i=12;j=0;k=6;l=0;hou1=1;hou2=2;min1=0;min2=0;flag=0;TMOD=0X11;//定时器0\1设置方式1 一次时间0.05s\0.01s TH0=(65536-50000)/256;TL0=(65535-50000)%256;TH1=(65536-20000)/256;TL1=(65535-20000)%256;EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;//开定时器1中断EX0=1;//开外部中断0TR0=1;//定时器0开始工作TR1=1;//定时器1开始工作IT0=1;//外部中断下降沿触发}void keyscan()//扫描独立键盘{if(key11==0){delay(1);if(key11==0)//消抖 {flag++;if(flag==5){flag=0;TR0=1;}while(!key11)//等待按键释放 {count();display(hou1,hou2,min1,min2); }}}if(flag==1) //此后为时钟设定分钟扫描{if(key12==0){delay(1);if(key12==0)//消抖{j++;while(!key12)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}if(key13==0){delay(1);if(key13==0)//消抖{j--;while(!key13)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}}if(flag==2) //此后为时钟设定小时扫描{if(key12==0){delay(1);if(key12==0)//消抖{i++;while(!key12)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}if(key13==0){delay(1);if(key13==0)//消抖{i--;while(!key13)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}}if(flag==3) //此后为闹钟设定分钟扫描{if(key12==0){delay(1);if(key12==0)//消抖{l++;while(!key12)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}if(key13==0){delay(1);if(key13==0)//消抖{l--;while(!key13)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}}if(flag==4) //此后为闹钟设定小时扫描{if(key12==0){delay(1);if(key12==0)//消抖{k++;while(!key12)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}if(key13==0){delay(1);if(key13==0)//消抖{k--;while(!key13)//等待按键释放{count();display(hou1,hou2,min1,min2); }}}}}void count(){if(j==60){j=00;if(flag==0)i++;}if(i==24){i=00;}if(j==255) {j=59;}if(i==255) {i=23;}if(l==60) {l=00;}if(k==24) {k=00;}if(l==255) {l=59;}if(k==255){k=23;}if(flag==0||flag==1||flag==2){hou1=i/10; hou2=i%10+10;min1=j/10; min2=j%10;}else{hou1=k/10;hou2=k%10+10; min1=l/10;min2=l%10;}}void display(uchar one,uchar two,uchar three,uchar four) {P2=0x02;if(flag==2||flag==4){if(tt2>10) P2=0x00;}P0=table[one];delay(5);P2=0x04;if(flag==2||flag==4) {if(tt2>10)P2=0x00; }P0=table[two];delay(5);P2=0x08; if(flag==1||flag==3){if(tt2>10)P2=0x00;}P0=table[three];delay(5);P2=0x10; if(flag==1||flag==3){if(tt2>10)P2=0x00;}P0=table[four]; delay(5); }void delay(uint z) //延时子函数1ms {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); } void et0() interrupt 1 {TH0=(65536-50000)/256;TL0=(65535-50000)%256;tt++;if(tt==1200){tt=0;j++;}}void ex0() interrupt 0 { led14=1;}void et1() interrupt 3 {TH1=(65536-20000)/256;TL1=(65535-20000)%256;tt2++;if(tt2==20){tt2=0;}}。
灯箱时钟代码
灯箱时钟代码本文档介绍了创建一个简单的灯箱时钟的代码。
灯箱时钟是一种使用 LED 灯带来显示时间的装置。
我们将使用 Arduino 平台和一些基本电子元件来搭建这个时钟。
材料清单在开始之前,确保你具备以下材料:Arduino 开发板LED 灯带电阻连接线电路图以下是连接电路的基本示意图:代码实现请按照以下步骤编写代码:1.导入所需的库:include2.定义灯带的引脚:define PIN_LED_STRIP 63.设置灯带的长度:define NUM_LED_STRIP 604.创建一个 NeoPixel 对象:Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LED_STRIP。
PIN_LED_STRIP。
NEO_GRB + NEO_KHZ800);5.初始化灯带:void setup() {strip.begin();strip.show();6.定义一个函数,用于更新灯带的颜色:void updateLEDStrip(int hour。
int minute。
int second) { strip.clear();将时、分、秒转换为一个 0 到 255 之间的值int hourValue = map(hour。
0.23.0.255);int minuteValue = map(minute。
0.59.0.255);int secondValue = map(second。
0.59.0.255);设置灯带的颜色for (int i = 0.i < NUM_LED_STRIP。
i++) {if (i < hourValue) {strip.setPixelColor(i。
strip.Color(255.0.0))。
// 红色else if (i < hourValue + minuteValue) {strip.setPixelColor(i。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED数字显示电子时钟源程序代码
程序:(注已完全经过调试,达到预期目的)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar count=0;
sbit LED=P1^0;
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管
0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0;
void delay(uint i) //延迟函数
{
uint j;
for(;i>0;i--)
for(j=124;j>0;j--);
}
void init()
{
ET0=1;
TMOD=0x51; //选定定时器0,1和中断0,1
TH0=(65536-25000)/256;
TL0=(65536-25000)%256; //设定时器0时间为250ms一次
ET1=1;
TH1=0xff;
TL1=0xff; //定时器1为中断
EX0=1;
IT0=1; //中断0开
EX1=1;
IT1=1; //中断1开
TR0=1; //定时器0开
TR1=1; //定时器1开
EA=1; //总中断开
}
void display() //时钟显示函数
{
P0=tab[hour/10%10];
P2=0xfe;
delay(1);
P0=tab[hour%10];
P2=0xfd;
delay(1);
P0=tab[fen/10%10];
P2=0xfb;
delay(1);
P0=tab[fen%10];
P2=0xf7;
delay(1);
P0=tab[miao/10%10];
P2=0xef;
delay(1);
P0=tab[miao%10];
P2=0xdf;
delay(1);
}
void main() //主函数
{
init();
LED=0;
while(1)
{
display();
}
}
void T0_int() interrupt 1 //定时器0函数{
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
count++;
if(count==20)
{
count=0;
miao= miao +1;
LED=~LED;
if(sec==60)
{
miao=0;
fen= fen +1;
if(fen ==60)
{
fen =0;
hour=hour+1;
if(hour==24)
hour=0;
}
}
}
}
void T1_int() interrupt 3 //定时器1函数控制秒针加1 {
TH1=0xff;
TL1=0xff;
miao=miao+1;
if(miao ==60)
miao =0;
}
void I1_int() interrupt 2 //中断1函数控制按键分针加1 {
EX0=0;
fen= fen +1;
if(fen ==60)
fen =0;
EX0=1;
}
void I0_int() interrupt 0 //中断函数0控制按键时针加1 {
EX1=0;
hour=hour+1;
if(hour==24)
hour=0;
EX1=1;
}。