数码管显示时钟c语言源代码
数码管动态显示c语言程序

//这是一个,四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止#include <reg52.h>unsigned char code LED[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; unsigned char LEDbuff[]={0xff,0xff,0xff,0xff};//定义数码管的位选段sbit SEG_bit_1 = P0^1;sbit SEG_bit_2 = P0^2;sbit SEG_bit_3 = P0^3;sbit SEG_bit_4 = P0^4;unsigned int cnt=0;unsigned int sec =0;unsigned char i=0;void main(){TMOD=0x01; /*设置定时器*/TH0=0xfc;TL0=0x18;TR0=1;EA=1; /*设置中断*/ET0=1;while(1){if(0==TF0){if(cnt>=1000){cnt=0;sec++;LEDbuff[0]=LED[sec%10]; /*设置数码管显示位*/LEDbuff[1]=LED[sec/10%10];LEDbuff[2]=LED[sec/100%10];LEDbuff[3]=LED[sec/1000%10];}}}}void interrupttimer0() interrupt 1 /*设置中断函数*/{TH0=0xfc;TL0=0x18;cnt++;P1=0xff;switch(i){case 0: SEG_bit_1 = 1;SEG_bit_4 = 0;P1=LEDbuff[0];i++;break;case 1: SEG_bit_4 = 1;SEG_bit_3 = 0;P1=LEDbuff[1];i++;break;case 2: SEG_bit_3 = 1;SEG_bit_2 = 0;P1=LEDbuff[2];i++;break;case 3: SEG_bit_2 = 1;SEG_bit_1 = 0;P1=LEDbuff[3];i=0;break;default:break;}}教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
数码管时钟显示C程

/* 数码管时钟显示led移动C 程序使用共阳极数码管*/#include<>#include<>#define uint unsigned int#define uchar unsigned charsbit 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++;}/*以上有什么地方还需要改进的还请老师明示*///**作者:胡甲如需转载请注明出处**////**湖北工业大学工程技术学院通信专业**////**单片机SST89E58RD 8位共阳数码管12M晶振**// //*******P0段选,P2位选*******////********2008年12月1号********//#include ""#define uchar unsigned char#define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; 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 set1=1,set2=1;sbit fm=P3^2;sbit k1=P3^4;sbit k2=P3^5;sbit k3=P3^6;sbit k4=P3^7;uchar table1[]={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*{uint i;uint j;for (i=0;i<m;i++){for(j=0;j<500;j++){}}}void timer0() interrupt 1{TMOD=0x01;TH0=0x3c;TL0=0xb1;n++;jishi();}main(){TMOD=0x01;TH0=0x3c;TL0=0xb1;TR0=1;EA=1;ET0=1;hh=12;mm=00;ss=00;nhh=7;nmm=30;nss=0;year=2008;mon=12;day=1;week=1;while(1){hhs=hh/10%10;//时分秒hhg=hh%10;mms=mm/10%10;mmg=mm%10;sss=ss/10%10;ssg=ss%10;nhhs=nhh/10%10;//闹钟nhhg=nhh%10;nmms=nmm/10%10;nmmg=nmm%10;nsss=nss/10%10;nssg=nss%10;days=day/10%10;//月日dayg=day%10;mons=mon/10%10;mong=mon%10;key_change(); //k1按键扫描key_set(); //k2按键扫描set_time(); //设置时间set_mdw(); //设置月日星期set_alarm(); //设置闹钟if(set1==1) //正常走时显示{P0=tab[hhs];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[hhg];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[mms];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[mmg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[10];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[sss];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[ssg];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==2) //设置时间{P0=tab[hhs];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[hhg];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[mms];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[mmg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[10];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[sss];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[ssg];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==3) //正常显示月日-星期{P0=tab[mons];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[mong];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[days];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[dayg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[11];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[11];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[week];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==4) //设置月日-星期{P0=tab[mons];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[mong];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[days];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[dayg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[11];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[11];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[week];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==5) //正常显示定时{P0=tab[nhhs];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[nhhg];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[nmms];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[nmmg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[10];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[nsss];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[nssg];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==6) //设置闹钟定时{P0=tab[nhhs];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[nhhg];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"P0=tab[nmms];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[nmmg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[10];P2_4=0;delay(1);P2_4=1;//"-"P0=tab[nsss];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[nssg];P2_0=0;delay(1);P2_0=1;//秒个位}baoshi(); //整点报时alarm(); //闹钟}}void jishi() //计时函数{if(n==20){n=0;ss++;if(ss==60){ss=0;mm++;if(mm==60){mm=0;hh++;if(hh==24){hh=0;day++;week++;if(week==8){week=0;}if(year%4==0&&year%100!=0||year%400==0) //闰年{if(day==table1[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}else //非闰年{if(day==table2[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}}}}}}uchar incone(uchar n) //加1函数{if(k3==0){delay(20);if(k3==0){n++;while(!k3);}}return(n);}uchar decone(uchar m) //减1函数{if(k4==0){delay(20);if(k4==0){m--;while(!k4);if(m<0){m=0;}}}return(m);}void key_change() // k1 按键扫描{if(k1==0){delay(20);if(k1==0){set1++;while(!k1);if(set1==7){set1=1;}}}}void key_set() //k2按键扫描{if(k2==0){delay(20);if(k2==0){set2++;while(!k2);if(set2==4){set2=1;}}}}void baoshi() //整点报时函数{if(mm==00&&ss==00){fm=0;}if(ss==1){fm=1;}}void alarm() //闹钟函数{uchar x;if(nhh==0){goto end;}if(hh==nhh&&mm==nmm&&ss==nss) {for(x=0;x<6;x++){fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(180);}}end:;}void set_time() //设置时间函数{if(set1==2){if(set2==1){hh=incone(hh);if(hh==24){hh=0;}if(hh==-1){hh=23;}hh=decone(hh);}if(set2==2){mm=incone(mm);if(mm==60){mm=0;}if(mm==-1){mm=59;}mm=decone(mm);}if(set2==3){ss=incone(ss);if(ss==60){ss=0;}if(ss==-1){ss=59;}ss=decone(ss);}}}void set_mdw() //设置月日星期函数{if(set1==4){if(set2==1){mon=incone(mon);if(mon==13){mon=1;}mon=decone(mon);if(mon==0){mon=12;}}if(set2==2){day=incone(day);if(day==32){day=1;}day=decone(day);if(day==0){day=31;}}if(set2==3){week=incone(week);if(week==8){week=1;}week=decone(week);if(week==0){week=7;}}}}void set_alarm() //设置闹钟函数{if(set1==6){if(set2==1){nhh=incone(nhh);if(nhh==24){nhh=0;}if(nhh==-1){nhh=23;}nhh=de cone(nhh);}if(set2==2){nmm=incone(nmm);if(nmm==60){nmm=0;}nmm=decone(nmm);if(nmm==-1){nmm=59;}}if(set2==3){nss=incone(nss);if(nss==60){nss=0;}nss=decone(nss);if(nss==-1){nss=59;}}}}#include<>unsigned char seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90};unsigned char flash,mode=0;char min=50,hour=12,hour_rom,min_rom,sec=25;unsigned char j,k;unsigned int i;unsigned char key_set_s,key_up_s,key_down_s,key_reset_s; sbit P0_7=P0^7;sbit key_set=P3^4;sbit key_up=P3^5;sbit key_down=P3^6;sbit key_reset=P3^7;sbit buzzer=P1^0;bit dop,bb; //声明void delay(unsigned int x) //延时{while(x--);}void timer0_isr(void) interrupt 1 //中断服务函数{TH0=0xf8; //为65535-2000=63535转化为16进制取高八位TL0=0x2f; //取低八位i++;bb=!bb;if(i>=250) //半秒,五百一秒{i=0;k++;flash=~flash;dop=!dop;}if(k>=2) //大于二归零{k=0;sec++;}if(sec>=60) //秒{sec=0;min++;}if(min>=60) //分{min=0;hour++;}if(hour>=24) //小时hour=0;P0=0xff; //P0初始化为全1if(mode==0) //正常显示{switch(j) //控制语句{case 0:P0=seven_seg[sec%10];P2=0xfe;break; //秒个位case 1:P0=seven_seg[sec/10];P2=0xfd;break; //秒十位case 2:P0=seven_seg[min%10];P0_7=dop;P2=0xfb;break;case 3:P0=seven_seg[min/10];P2=0xf7;break;case 4:P0=seven_seg[hour%10];P0_7=dop;P2=0xef;break; //dop为小数点case 5:P0=seven_seg[hour/10];P2=0xdf;break;}}////////////////////if(mode==1) //模式一C1状态{switch(j){case 0:P0=seven_seg[min%10];P2=0xfe;break;case 1:P0=seven_seg[min/10];P2=0xfd;break;case 2:P0=seven_seg[hour%10]| flash;P2=0xfb;break; //flash为闪烁case 3:P0=seven_seg[hour/10]| flash;P2=0xf7;break;case 4:P0=seven_seg[1];P2=0xef;break; //1为C1状态case 5:P0=0xc6;P2=0xdf;break; //0xc6为显示C}}////////////////////if(mode==2) //模式二C1状态{switch(j){case 0:P0=seven_seg[min%10]| flash;P2=0xfe;break;case 1:P0=seven_seg[min/10]| flash;P2=0xfd;break;case 2:P0=seven_seg[hour%10];P2=0xfb;break;case 3:P0=seven_seg[hour/10];P2=0xf7;break;case 4:P0=seven_seg[1];P2=0xef;break;case 5:P0=0xc6;P2=0xdf;break;}}////////////////////if(mode==3) //模式三C2状态switch(j){case 0:P0=seven_seg[min_rom%10];P2=0xfe;break;case 1:P0=seven_seg[min_rom/10];P2=0xfd;break;case 2:P0=seven_seg[hour_rom%10]| flash;P2=0xfb;break; case 3:P0=seven_seg[hour_rom/10]| flash;P2=0xf7;break; case 4:P0=seven_seg[2];P2=0xef;break;case 5:P0=0xc6;P2=0xdf;break;}}////////////////////if(mode==4) //模式四C2状态{switch(j){case 0:P0=seven_seg[min_rom%10]| flash;P2=0xfe;break; case 1:P0=seven_seg[min_rom/10]| flash;P2=0xfd;break; case 2:P0=seven_seg[hour_rom%10];P2=0xfb;break;case 3:P0=seven_seg[hour_rom/10];P2=0xf7;break;case 4:P0=seven_seg[2];P2=0xef;break;case 5:P0=0xc6;P2=0xdf;break;}}j++;if(j>=6)j=0;void key(void) //调用开关函数{////////////////if(key_set==0) //设置{delay(300);if(key_set==0)key_set_s=1;}if(key_set==1&&key_set_s==1) {mode++;if(mode>=5)mode=1;key_set_s=0;}////// ///if(key_up==0) //上调{delay(300);if(key_up==0)key_up_s=1;}if(key_up==1&&key_up_s==1) {if(mode==1)hour++;if(mode==2)min++;if(mode==3)hour_rom++;if(hour_rom>=24)hour_rom=0;if(mode==4)min_rom++;if(min_rom>=60)min_rom=0;key_up_s=0;}/////////////////if(key_down==0) //下调{delay(300);if(key_down==0)key_down_s=1;}if(key_down==1&&key_down_s==1){if(mode==1)hour--;if(hour<0)hour=23;if(mode==2)min--; if(min<0)min=59;if(mode==3)hour_rom--;if(hour_rom<0)hour_rom=23;if(mode==4)min_rom--;if(min_rom<0)min_rom=59;key_down_s=0;}/////////////////if(key_reset==0) //复位{delay(300);if(key_reset==0)key_reset_s=1;}if(key_reset==1&&key_reset_s==1){key_reset_s=0;mode=0;}}void timer0_init(void) //timero初始化函数{TMOD=0x01; //方式1TH0=0xf8;TL0=0x2f;EA=1; //中断开关ET0=1; //中断小开关TR0=1; //开始计数}void main(void) //主函数{timer0_init();while(1)key();{if(hour==hour_rom&&min==min_rom) buzzer=bb; //buzzer为蜂鸣器}}。
51单片机数码管显示时钟(C语言)

* 输出
:无
*******************************************************************************
/
void main() {
Ds1302Init(); Timer0Configuration(); while(1) {
Ds1302ReadTime(); disp[7] = DIG_CODE[TIME[0]&0x0f]; disp[6] = DIG_CODE[TIME[0]>>4]; disp[5] = 0X40; disp[4] = DIG_CODE[TIME[1]&0x0f]; disp[3] = DIG_CODE[TIME[1]>>4]; disp[2] = 0X40; disp[1] = DIG_CODE[TIME[2]&0x0f]; disp[0] = DIG_CODE[TIME[2]>>4]; }
/
void DigDisplay() interrupt 1 { //定时器在工作方式二会自动重装初,所以不用在赋值。 // TH0=0X9c;//给定时器赋初值,定时 1ms // TL0=0X00;
DIG=0; //消隐 switch(Num) //位选,选择点亮的数码管, {
case(7): LSA=0;LSB=0;LSC=0; break;
uchar n;
EA = 0; RST = 0; _nop_();
SCLK = 0;//先将 SCLK 置低电平。 _nop_(); RST = 1; //然后将 RST(CE)置高电平。 _nop_();
for (n=0; n<8; n++)//开始传送八位地址命令 {
数码管时钟显示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};//非闰年voidjishi();voidbaoshi();voidalarm();voidset_time();voidset_alarm(); voidset_mdw();voidkey_change();voidkey_set();voiddelay(intm)//延时程序,延时m*0.5ms{uinti;uintj;for(i=0;i=250)//半秒,五百一秒{i=0;k++;flash=~flash;dop=!dop;}if(k>=2)//大于二归零{k=0;sec++;}if(sec>=60)//秒{sec=0;min++;}if(min>=60)//分{min=0;hour++;}if(hour>=24)//小时hour=0;P0=0xff;//P0初始化为全111111111if(mode==0)//正常显示{switch(j)//控制语句{case0:P0=seven_seg[sec%10];P2=0xfe;break;//秒个位case1:P0=seven_seg[sec/10];P2=0xfd;break;//秒十位case2:P0=seven_seg[min%10];P0_7=dop;P2=0xfb;break;case3:P0= seven_seg[min/10];P2=0xf7;break;case4:P0=seven_seg[hour%10];P 0_7=dop;P2=0xef;break;//dop为小数点case5:P0=seven_seg[hour/10];P2=0xdf;break;}}////////////////////if(mo de==1)//模式一C1状态{switch(j){case0:P0=seven_seg[min%10];P2=0xfe;break;case1:P0= seven_seg[min/10];P2=0xfd;break;case2:P0=seven_seg[hour%10]|fl ash;P2=0xfb;break;//flash为闪烁case3:P0=seven_seg[hour/10]|flash;P2=0xf7;break;case4:P0=seven_ seg[1];P2=0xef;break;//1为C1状态case5:P0=0xc6;P2=0xdf;break;//0xc6为显示C}}////////////////////if(mode==2)//模式二C1状态{switch(j){case0:P0=seven_seg[min%10]|flash;P2=0xfe;break;case1:P0=seven_seg[min/10]|flash;P2=0xfd;break;case2:P0=seven_seg[h our%10];P2=0xfb;break;case3:P0=seven_seg[hour/10];P2=0xf7;bre ak;case4:P0=seven_seg[1];P2=0xef;break;case5:P0=0xc6;P2=0xdf;b reak;}}////////////////////if(mode==3)//模式三C2状态{switch(j){case0:P0=seven_seg[min_rom%10];P2=0xfe;break;case1 :P0=seven_seg[min_rom/10];P2=0xfd;break;case2:P0=seven_seg[h our_rom%10]|flash;P2=0xfb;break;case3:P0=seven_seg[hour_rom/1 0]|flash;P2=0xf7;break;case4:P0=seven_seg[2];P2=0xef;break;case5 :P0=0xc6;P2=0xdf;break;}}////////////////////if(mode==4)//模式四C2状态{switch(j){case0:P0=seven_seg[min_rom%10]|flash;P2=0xfe;break; case1:P0=seven_seg[min_rom/10]|flash;P2=0xfd;break;case2:P0=se ven_seg[hour_rom%10];P2=0xfb;break;case3:P0=seven_seg[hour_r om/10];P2=0xf7;break;case4:P0=seven_seg[2];P2=0xef;break;case5 :P0=0xc6;P2=0xdf;break;}}j++;if(j>=6)j=0;}voidkey(void)//调用开关函数{////////////////if(key_set==0)//设置{delay(300);if(key_set==0)key_set_s=1;}if(key_set==1if(mode>=5) mode=1;key_set_s=0;}/////////if(key_up==0)//上调{delay(300);if(key_up==0)key_up_s=1;}if(key_up==1if(mode==2) min++;if(mode==3)hour_rom++;if(hour_rom>=24)hour_rom=0;if( mode==4)min_rom++;if(min_rom>=60)min_rom=0;key_up_s=0;}// ///////////////if(key_down==0)//下调{delay(300);if(key_down==0)key_down_s=1;}if(key_down==1if(h our<0)hour=23;if(mode==2)min--;if(min<0)min=59;if(mode==3)ho ur_rom--;if(hour_rom<0)hour_rom=23;if(mode==4)min_rom--;if(m in_rom<0)min_rom=59;key_down_s=0;}/////////////////if(key_reset== 0)//复位{delay(300);if(key_reset==0)key_reset_s=1;}if(key_reset==1mode= 0;}}voidtimer0_init(void)//timero初始化函数{TMOD=0x01;//方式1TH0=0xf8;TL0=0x2f;EA=1;//中断开关ET0=1;//中断小开关TR0=1;//开始计数}voidmain(void)//主函数{timer0_init();while(1)key();{if(hour==hour_rom//buzzer为蜂鸣器}}。
C语言课程设计 时钟代码

/*电子时钟源代码*/#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#define PI 3.1415926 /*定义常量*/#define UP 0x4800 /*上移↑键:修改时间*/#define DOWN 0x5000 /*下移↓键:修改时间*/#define ESC 0x11b /*ESC键:退出系统*/#define TAB 0xf09 /*TAB键:移动光标*//*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将double型的小时数转换成int型*/int digitmin(double); /*将double型的分钟数转换成int型*/int digitsec(double); /*将double型的秒钟数转换成int型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/ void clearcursor(int);/*消除前一个光标*/void clockhandle(); /*时钟处理*/ double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t[1];/*定义一个time结构类型的数组*/main(){int driver, mode=0,i,j;driver=DETECT; /*自动检测显示设备*/initgraph(&driver, &mode, "");/*初始化图形系统*/setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置三点宽实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/setcolor(9); /*设置当前画线颜色*/ line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,297,56);line(340,56,564,56); /*画主体框架的边直线*//*arc(int x, int y, int stangle, int endangle, int radius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12); /*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,"CLOCK"); /*显示标题*/setcolor(7);rectangle(342,72,560,360); /*画一个矩形,作为时钟的框架*/setwritemode(0); /*规定画线的方式。
多功能时钟C源代码

void start();//启动 IIC 总线 void stop();//主机发送停止信号 void respons();//从器件应答 void write_byte(uchar date);//向芯片写入一个字节 uchar read_byte();//从芯片读出一个字节 uchar read(uchar add);//从芯片指定地址中读出一个字节 void write(uchar add,uchar date);//向芯片指定地址中写出一个字节; bit Init_DS18B20();//18b20 初始化 uchar Read_DS18B20();//读取一个字节 void Write_DS18B20(uchar date);//写入一个字节 uint Get_tem();//读取温度 void Temperature();//转换所读取到的温度 void displaytemperature();//显示温度的函数 void keyscan();////调整时间的函数 void clock();//设定闹铃功能函数 void display(uchar x,uchar y,uchar z);//显示函数 /*~~~~~~~~~~~子函数~~~~~~~~~~~*/ //微秒级延时函数 void delayus(uchar tt) {
hou--; keysound();
while(!timebelow); for(i=10;i>0;i--){display(hou,min,0x00);} } } if(flag2==1)//调整分钟 { if(timeabove==0) { delayms(10); if(timeabove==0)
delayms(10); if(timeabove==0)
世上最简单的遥控(数码管显示)电子钟(C语言编写)

世上最简单的遥控(数码管显示)电子钟(C语言编写)/*此程序为红外遥控电子钟,晶振为12M,MCU 型号为51 系列,电路很简单四位共阳数码管,红外接收管sm0038 接在P3.2*/#include #define uchar unsigned char#define uint unsigned int#define c(x) (x*120000/120000)sbit IR=P3 ; sbit ge=P2;//数码管四位选控制端sbit shi=P2 ;sbit bai=P2;sbit qian=P2;char miao,fen=59,shij=23;//时分秒3 个变量uchar num,ding; //两定时器计数变量uint temp;//遥控解码变量uchar i;uchar j;bit flag;//控制小数点亮与灭变量bit power;//控制数码管亮与灭变量bit flash;//进入时间调整标志位变量uchar IRBUF[4]; //用于保存解码结果uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};uint Low(){TL0=0;TH0=0;TR0=1;while(!IR&&(TH0&0x80)==0);TR0=0;returnTH0*256+TL0;}//=============================================================uintHigh(){TL0=0;TH0=0;TR0=1;while(IR&&(TH0&0x80)==0);TR0=0;returnTH0*256+TL0;}void xian(uchar shik,uchar fen){P0=table[shik/10];if(power==0)qian=0;elseqian=1;//delay(2);qian=1;if(flag==0)P0=table[shik%10]&0x7f;elseP0=table[shik%10]|0x80;if (power==0)bai=0;elsebai=1;//delay(2);bai=1;P0=table[fen/10];if(power==0)shi=0;els eshi=1;//delay(2);shi=1;P0=table[fen%10];if(power==0)ge=0;elsege=1;//delay(2);ge =1;}void yin(){while(1){ restart: while(IR) {xian(shij,fen); if(flash==1) { if(ding>5) { ding=0; power=~power; //xian(shij,fen); } } }。
51单片机数码管显示时钟程序

#include〈reg52.h〉//#include#include<intrins。
h〉#define uchar unsigned char#define uint unsigned intsbit 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工作方式1TH0=(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{keyscan1 ();display0(nf,nf1,ns,ns1);}}}void keyscan (){if(key1==0){delay(10);if(key1==0)nums++;if (nums==24)nums=0;while(!key1);display(m,m1,f,f1,s,s1);}if(key2==0){delay(10);if(key2==0)numf++;if (numf==60)numf=0;while(!key2);display(m,m1,f,f1,s,s1);}if(key3==0){delay(10);if(key3==0){dingshi=~dingshi;while(!key3)display(m,m1,f,f1,s,s1);}}/*if(key4==0){delay(10);if(key4==0){flag=1;while(!key4);display(m,m1,f,f1,s,s1);}}*/}void keyscan1(){if(key1==0){delay(10);if(key1==0)numns++;if (numns==24)numns=0;while(!key1);// display(nf,nf1,ns,ns1);}if(key2==0){delay(10);if(key2==0)numnf++;if (numnf==60)numnf=0;while(!key2);// display(nf,nf1,ns,ns1);}if(key3==0){delay(10);if(key3==0){dingshi=0;while(!key3);// display(m,m1,f,f1,s,s1);}}}void alram(){if((numnf==numf)&&(numns==nums))beep=0;if(((numnf+1==numf)&&(numns==nums))&&(dingshi==0))//一分钟报时提示beep=1;}void display0(uchar nf,uchar nf1,uchar ns,uchar ns1)//闹钟显示函数{nf=numnf%10;nf1=numnf/10;ns=numns%10;ns1=numns/10;/*wela=1;P0=0xc0;//送位选数据wela=0;P0=0xff;*/dula=1;P0=table[ns1];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[ns]|0x80;dula=0;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[nf1];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[nf];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1) //时间显示{dula=1;P0=table[m1];//秒位第1位dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=table[m];// 秒位第2位dula=0;P0=0xff;wela=1;wela=0;delay(1);dula=1;P0=table[s1]; //时位第一位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[s]|0x80;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[f1];//分位第一位dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[f]|0x80;dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void T0_timer() interrupt 1{TH0=(65536—46080)/256 ;TL0=(65536—46080)%256 ;num2++;if(num2==20){num++;num2=0;m=num%10;m1=num/10;f=numf%10;f1=numf/10;s=nums%10;s1=nums/10;if(num==59){num=0;numf++;if(numf==59){numf=0;nums++;}if (nums==24)nums=0;}}}void delay(uint z){uint x,y;for(x=110;x〉0;x—-)for(y=z;y>0;y—-);}。
数码管显示时钟程序

sbit RST = P1^2;
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
uchar *WEEK[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"};
uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00 "};
Set_LCD_POS(p);
for(i=0;i<16;i++)
{
Write_LCD_Data(s[i]);
DelayMS(1);
}
}
void Format_DateTime(uchar d,uchar *a)
{
a[0]=d/10+'0';
a[1]=d%10+'0';
}
void main()
{
Init_LCD();
从DS1302读1字节数据
**************************************/
BYTE DS1302_ReadByte()
{
BYTE i;
BYTE dat = 0;
for (i=0; i<8; i++) //8位计数器
{
SCLK = 0; //时钟线拉低
Delay(); //延时等待
Display_LCD_String(0x00,LCD_DSY_BUFFER1);
数码管时钟C语言程序

// F = * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x)
void Jiri(uchar whichyear,uchar jieqiNum)
uchar alarmH,alarmM,alarmS,alarmKey,alarmKey_save;//闹钟信息用变量
uchar searchYH,searchYL,searchM,searchD;//查询用变量
uchar secDelay,seconds,showTime;//界面显示延时用变量
uchar setFlash;bit flash01;//设置用变量,闪烁位,闪烁位数据状态
/*----------*/
/*农历变量*/
uchar Years,runYear;//距1900年的年数,闰年标志变量
uchar Spring11;uint Date11;//春节及当天距离元旦天数
uint daxiaoMonth;//存放当年全部大小月信息
float Days;//积日
/*=======================================================*/
/*声明自定义函数*/
void display(void);//声明显示函数
void readDate(void);//声明从DS12C887+读取公历日期和时间函数
if(thisNum<10){thisNum+=100;}
toShow[2]=thisNum/10;//显示地支
数码管动态显示C语言和汇编程序

1.要求:使用两个数码管,并从01开始,每隔1s数码管加1,一直显示到60.C语言:#include <>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6; //段选,申明锁存器1的锁存端sbit wela=P2^7; //位选,申明锁存器2的锁存端uchar code table[]= //共阴极数码管编码{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f } ;void delayms(uint xms) //延时xms{ uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display(uchar,uchar);uchar num,num1=1,shi,ge=1; //赋初值void main(){TMOD=0x10; //设定时器1方式1定时50ms,循环20次实现1s延时TH1=(65536-50000)/256; //装初值TL1=(65536-50000)%256;EA=1; //开总中断ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1) //在这里不停的对数码管动态扫描等待中断发生{display(shi,ge);}}void display(uchar shi,uchar ge) //显示子函数{ dula=1;P0=table[shi]; //送段选数据dula=0;P0=0xff; //消影,送位选数据前关闭所有显示,防止打开位选锁存时wela=1; //原来段选数据通过位选锁存器造成混乱P0=0xfe; //送位选数据wela=0;delayms(5); //延时dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);}void T1_time()interrupt 3{TH1=(65536-50000)/256; //重装初值TL1=(65536-50000)%256;num++;if(num==20) //20次循环,50ms 20次=1s{ num=0; //到20次以后清零重新再计数20次num1++; //数码管显示加1if(num1==61) //数码管显示到60后又从01开始num1=1;shi=num1/10; //把两位数分离后分别送数码管显示十位和个位ge=num1%10;}}汇编:ORG 0000HAJMP MainORG 000BH //定时器0的中断入口地址AJMP ZDORG 0030HMain:MOV R0,#1 //初始值从01开始MOV R4,#20 //循环20次来实现1s延时MOV DPTR,#TABLE //表头地址送给DPTRMOV TMOD,#01H //定时器0方式1定时50msMOV TH0,#03CH //赋初值MOV TL0,#0B0HSETB EA //开总中断SETB ET0 //开定时器0中断SETB TR0 //启动定时器0中断LP1:MOV A,R0MOV B,#10DIV AB //A为整数B为余数MOVC A,@A+DPTRSETB //数码管显示十位MOV P0,#0FEHCLRSETBMOV P0,ACLRACALL DELAY5MSMOV A,B //数码管显示个位MOVC A,@A+DPTRSETBMOV P0,#0FDHCLRSETBMOV P0,ACLRACALL DELAY5MSAJMP LP1ZD: MOV T H0,#03CH //重新赋初值MOV T L0,#0B0HDJNZ R4,LP2 //是否循环20次MOV R4,#20INC R0CJNE R0,#61,LP2MOV R0,#01LP2: RETI //中断返回DELAY5MS: MOV R6,#5 //延时5msLOP1: MOV R5,#250LOP2: NOPNOPDJNZ R5,LOP2DJNZ R6,LOP1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //共阴极数码管编码END。
数码管时钟源码

编写一个数码管时钟的源码涉及编程语言和硬件平台的选择。
以下是一个简单的Arduino示例,使用Arduino语言和常见的7段数码管。
```cpp#include <Arduino.h>// 定义数字0到9在7段数码管上的映射const byte digitPatterns[] = {0b00111111, // 00b00000110, // 10b01011011, // 20b01001111, // 30b01100110, // 40b01101101, // 50b01111101, // 60b00000111, // 70b01111111, // 80b01101111 // 9};// 数码管引脚定义const int digitPins[] = {2, 3, 4, 5}; // 个位到千位// 时间变量int hours = 12;int minutes = 0;int seconds = 0;void setup() {// 设置数码管引脚为输出for (int i = 0; i < 4; ++i) {pinMode(digitPins[i], OUTPUT);}}void loop() {// 更新时间updateTime();// 显示时间displayTime();// 等待一秒delay(1000);}void updateTime() {seconds++;if (seconds == 60) { seconds = 0;minutes++;if (minutes == 60) { minutes = 0;hours++;if (hours == 13) { hours = 1;}}}}void displayTime() {// 将小时、分钟、秒拆分成个位、十位、百位、千位int digitValues[] = {hours % 10, hours / 10, minutes % 10, minutes / 10};// 依次显示每位数字for (int i = 0; i < 4; ++i) {// 选择数码管digitalWrite(digitPins[i], LOW);// 显示对应数字byte pattern = digitPatterns[digitValues[i]];for (int j = 0; j < 7; ++j) {digitalWrite(6 + j, bitRead(pattern, j));}// 等待一小段时间以确保数码管稳定显示delay(1);// 关闭数码管digitalWrite(digitPins[i], HIGH);}}```请注意,这只是一个简单的示例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
EA=1;
}
bit ReadRTC_Flag;//定义读DS1302标志
unsigned char l_tmpdate[7]={0,0,12,15,5,3,8};//秒分时日月周年08-05-15 12:00:00
unsigned char l_tmpdisplay[8];
code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位
void InitTIMER0(void)
{
TMOD|=0x01;//定时器设置 16位
TH0=0xef;//初始化值
TL0=0xf0;
ET0=1;
TR0=1;
EA=1;
}
/******************************************************************/
{
if(SDA)
temp|=0x80; //每次传输低字节
SCK=0;
temp>>=1; //右移一位
_nop_();
_nop_();
_nop_();
SCK=1;
}
RST=0;
_nop_(); //以下为DS1302复位的稳定时间
}
}
}
/******************************************************************/
/* 定时器0初始化 */
/******************************************************************/
code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
* 标题: 试验数码管显示时钟 *
* *
* 通过本例程了解 DS1302时钟芯片的基本原理和使用 ,理解并掌握DS1302时钟芯片 *
* 驱动程序的编写以及实现数字字符在数码管中的显示。 *
5利用遥控器(按任意键)触发中断,中断后切换继电器RK2的开关状态,即实现遥控继电器RK2的开和关。
注:第1题为自学要求,第2至5题中,可选择性完成不少于2道题。开学后将完成的题目效果与程序提交到吴岭青老师处。
/*******************************************************************************
_nop_();
RST=0;
* 注意:JP1302跳线冒要短接。 *
* 请学员认真消化本例程,懂DS1302在C语言中的操作 *
********************************************************************************/
unsigned char Read_Ds1302 ( unsigned char address );
void Read_RTC(void);//read RTC
void Set_RTC(void); //set RTC
void InitTIMER0(void);//inital timer0
/******************************************************************/
void Write_Ds1302_byte(unsigned char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
/******************************************************************/
/* 主函数 */
/******************************************************************/
51单片机自学寒假作业
2011-1-13
1 调试实验例程,自学定时计数器与中断系统的应用。
2 在实验箱的LED矩阵显示屏上滚动显示“中南民族大学”六个汉字
3 使用INT0外部中断触发输入引脚对按键进行响应,每按下一次按键,蜂鸣器发出“嘟…嘟…嘟”(嘟响三声)。
4 使用8个数码管作为显示输出,利用定时器硬件定时为时间基准,设计一个电子钟程序,要求显示时、分、秒。
{
unsigned char i;
for (i=0;i<8;i++) //循环8次 写入数据
{
SCK=0;
SDA=temp&0x01; //每次传输低字节
temp>>=1; //右移一位
SCK=1;
}
}
//共阴数码管 0-9 '-' '熄灭‘表
/******************************************************************/
/* 函数声明 */
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
RST=1;
_nop_();
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++) //循环8次 读取数据
l_tmpdisplay[3]=l_tmpdate[1]/16;
l_tmpdisplay[4]=l_tmpdate[1]&0x0f;
l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[0]/16;
l_tmpdisplay[7]=l_tmpdate[0]&0x0f;
{
ReadRTC_Flag=0;
Read_RTC();
l_tmpdisplay[0]=l_tmpdate[2]/16; //数据的转换,因我们采用数码管0~9的显示,将数据分开
l_tmpdisplay[1]=l_tmpdate[2]&0x0f;
l_tmpdisplay[2]=10; //加入"-"
void main(void)
{
InitTIMER0(); //初始化定时器0
Set_RTC(); //写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽
while(1)
{
if(ReadRTC_Flag)
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <intrins.h>
char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
sbit SCK=P3^6; //时钟
sbit SDA=P3^4; //数据
void Write_Ds1302( unsigned char address,unsigned char dat )
{
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_(); //启动
}
}if(con!=0)
{
if(key3==0)
{
delay1ms(10);
while(key3==0);
timedata[con]--;
if(con==2)con2=23;else
con2=59;
if(timedata[con]<=0)
{timedata[con]=con2;}
/******************************************************************/
/* 写入DS1302 */
/******************************************************************/
Write_Ds1302_Byte(address); //发送地址
Write_Ds1302_Byte(dat); //发送数据
RST=0; //恢复
}
/******************************************************************/
}}
if(con!=0)
{if(key2==0)
{delay1ms(10);
while(key2==0);
timedata[con]++;
if(con==2)con1=;
else
con1=60;
if(timedata[con]>=con1)
{timedata[con]=0;}
/* 写一个字节 */
/******************************************************************/