用C语言编写AT89C51单片机程序,设计一个智能数字钟。

用C语言编写AT89C51单片机程序,设计一个智能数字钟。,第1张

#include<reg52h>

#define uint unsigned int

#define uchar unsigned char

sbit QB1=P1^0;

sbit QB2=P1^1; //数码管段选

sbit QB3=P1^2;

sbit QB4=P1^3;

sbit QB5=P1^4;

sbit QB6=P1^5;

sbit fm=P1^6; //蜂鸣器

sbit s1=P2^4; //s5按键,切换显示

sbit s2=P2^3; //s2按键,设置调时

sbit s3=P2^2; //s3按键,加1

sbit s4=P2^1; //s4按键,减1

sbit led1=P0^0;

sbit led2=P0^1;

sbit led3=P0^2;

uchar count;

uchar sec,minu,hour,day,week,mon;

uchar n_sec,n_minu,n_hour;

uint year;

uchar set_2=1,set_1=1;

uchar hs,hg,mis,mig,ss,sg;

uchar nhs,nhg,nms,nmg,nss=0,nsg=0;

uchar ms,mg,ds,dg,w;

uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,

0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf}; //0~F,-,共阳

//uchar code tableyi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//0-F,-,共阴

uchar code table_d[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef}; //0~9数组,带小数点

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 delay(uint); //延时函数

void timer0(); //走时中断函数

void jishi(); //计时函数

void key_change(); //切换显示按键函数

void key_set(); //设置时间按键函数

void disp(uchar,uchar,uchar,uchar,uchar,uchar); //显示函数

void zd_clock(); //整点报时函数

void nz_clock(); //闹钟函数

uchar incone(uchar); //加1函数

uchar decone(uchar); //减1函数

void set_time(); //设置时间函数

void set_clock(); //设置闹钟函数

void set_mdw(); //设置月日星期函数

void main() //主函数

{

EA=1;

ET0=1;

TR0=1;

TMOD=0x01;

TH0=0x4c; //50ms初值 晶振110592

TL0=0x00;

hour=23;minu=59;sec=49; //赋初值:11点59分0秒

n_hour=12;n_minu=56;n_sec=0; //闹钟赋初值12点1分0秒

year=2008;mon=5;day=14;week=3;//年月日星期赋初值2008年5月11日星期天;祝天下所有母亲节日快乐

while(1)

{

hs=hour/10; //时分秒HHMMSS

hg=hour%10;

mis=minu/10;

mig=minu%10;

ss=sec/10;

sg=sec%10;

ms=mon/10; //月日-星期MMDD-W

mg=mon%10;

ds=day/10;

dg=day%10;

w=week;

nhs=n_hour/10; //闹钟定时HHMMSS

nhg=n_hour%10;

nms=n_minu/10;

nmg=n_minu%10;

nss=n_sec/10;

nsg=n_sec%10;

key_change(); //s4按键扫描

key_set(); //s2按键扫描

set_time(); //设置时间

set_mdw(); //设置月日星期

set_clock(); //设置闹钟

if(set_1==1) //正常走时显示

{

disp(hs,hg,mis,mig,ss,sg);

}

if(set_1==2) //设置时间,LED1闪亮

{

disp(hs,hg,mis,mig,ss,sg);

if(sec%2==0)

{led2=1;led3=1;led1=~led1;}

// else

// {led1=1;}

}

if(set_1==3) //正常显示月日-星期

{

disp(ms,mg,ds,dg,16,w);

}

if(set_1==4) //设置月日-星期,LED2闪亮

{

disp(ms,mg,ds,dg,16,w);

if(sec%2==0)

{led1=1;led3=1;led2=~led2;}

// else

// {led2=1;}

}

if(set_1==5) //正常显示定时

{

disp(nhs,nhg,nms,nmg,nss,nsg);

}

if(set_1==6) //设置闹钟定时,LED3闪亮

{

disp(nhs,nhg,nms,nmg,nss,nsg);

if(sec%2==0)

{led1=1;led2=1;led3=~led3;}

// else

// {led3=1;}

}

zd_clock(); //整点报时

nz_clock(); //闹钟

}

}

void timer0() interrupt 1 //50ms中断函数

{

TMOD=0x01;

TH0=0x4c; //50ms初值 晶振110592

TL0=0x00;

count++;

if(count==20)

{

count=0;

sec++;

jishi(); //调计时函数

}

}

void jishi() //计时函数

{

if(sec==60)

{

sec=0;

minu++;

if(minu==60)

{

minu=0;

hour++;

if(hour==24)

{ hour=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++;}

}

}

}

}

}

}

void key_change() //s1按键扫描

{

if(s1==0)

{

delay(200);

if(s1==0)

{

set_1++;

while(!s1);

if(set_1==7)

{set_1=1;}

}

}

}

void key_set() //s2按键扫描

{

if(s2==0)

{

delay(10);

if(s2==0)

{

set_2++;

while(!s2);

if(set_2==4)

{set_2=1;}

}

}

}

void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //显示函数

{

QB1=1;

QB2=0;

QB3=0;

QB4=0;

QB5=0;

QB6=0;

P3=table[a1]; //段码送P0口

delay(10); //延时一小会

QB1=0;

QB2=1;

QB3=0;

QB4=0;

QB5=0;

QB6=0;

P3=table[a2]; //第2个数码管显示,带小数点

delay(10);

QB1=0;

QB2=0;

QB3=1;

QB4=0;

QB5=0;

QB6=0;

P3=table[a3]; //第3个数码管显示

delay(10);

QB1=0;

QB2=0;

QB3=0;

QB4=1;

QB5=0;

QB6=0;

P3=table[a4]; //第4个数码管显示,带小数点

delay(10);

QB1=0;

QB2=0;

QB3=0;

QB4=0;

QB5=1;

QB6=0;

//第5个数码管显示

P3=table[a5];

delay(10);

QB1=0;

QB2=0;

QB3=0;

QB4=0;

QB5=0;

QB6=1;

P3=table[a6]; //第6个数码管显示

delay(10);

QB1=0;

QB2=0;

QB3=0;

QB4=0;

QB5=0;

QB6=0;

}

void zd_clock() //整点报时函数

{

if(minu==59&&(sec==53||sec==55||sec==57))

{

fm=0;

delay(5);

fm=1;

delay(5);

}

fm=0;

if(minu==59&&sec==59)

{

fm=0;

delay(5);

fm=1;

delay(5);

fm=0;

}

}

void nz_clock() //闹钟函数

{

if(hour==n_hour&&minu==n_minu&&sec==n_sec)

//if((sec%2==0)&&sec<30)

{

fm=0;

delay(1);

fm=1;

delay(1);

}

}

void set_time() //设置时间函数

{

if(set_1==2)

{

if(set_2==1)

{

hour=incone(hour);

if(hour==24)

{hour=0;}

// if(hour<0)

// {hour=23;}

hour=decone(hour);

}

if(set_2==2)

{

minu=incone(minu);

if(minu==60)

{minu=0;}

// if(minu<0)

// {minu=59;}

minu=decone(minu);

}

}

}

void set_mdw() //设置月日星期函数

{

if(set_1==4)

{

if(set_2==1)

{

mon=incone(mon);

if(mon==13)

{mon=1;}

mon=decone(mon);

// if(mon==0)

// {mon=12;}

}

if(set_2==2)

{

day=incone(day);

if(day==32)

{day=0;}

day=decone(day);

// if(day==0)

// {day=0;}

}

if(set_2==3)

{

week=incone(week);

if(week==8)

{week=0;}

week=decone(week);

// if(week==0)

// {week=7;}

}

}

}

void set_clock() //设置闹钟函数

{

if(set_1==6)

{

if(set_2==1)

{

n_hour=incone(n_hour);

if(n_hour==24)

{n_hour=0;}

n_hour=decone(n_hour);

if(n_hour==0)

{n_hour=0;}

}

if(set_2==2)

{

n_minu=incone(n_minu);

if(n_minu==60)

{n_minu=0;}

n_minu=decone(n_minu);

if(n_minu==0)

{n_minu=0;}

}

}

}

uchar incone(uchar n) //加1函数

{

if(s3==0)

{ delay(200);

if(s3==0)

{

n++;

while(!s3);

}

}

return(n);

}

uchar decone(uchar m) //减1函数

{

if(s4==0)

{

delay(200);

if(s4==0)

{

m--;

while(!s4);

if(m<0)

{m=0;}

}

}

return(m);

}

void delay(uint k) //延时函数

{

uint i,j;

for(i=k;i>0;i--)

for(j=80;j>0;j--);

}

我给你一个保证好用的,KEY_COM调模式,按一下进入调时 ,在按一下调分,再按一下退出调时模式,这时加减按键都无效,在调时模式时会产生闪烁方式,这段程序是我自己想的办法实现的,可能有点笨拙,但效果很好,我建议你用DS1302做时钟,用单片机计数器由于晶振等原因会有很大的误差,实际中没有用直接用单片机做的,希望对你有帮助。

(段选和位选接的都是8位的D触发器,如果你的开发板电路结构有区别,改一下显示部分的程序就行了)

#include<reg51h>

#define uchar unsigned char

sbit duan=P0^0;

sbit wei=P0^1;

sbit KEY_ADD=P3^3;

sbit KEY_DEC=P3^4;

sbit KEY_COM=P3^5;

uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40, 0x00 };

char hour=0,minute=0,second=0,i=0,flag=0;

unsigned char t=0,t1=0,t2=0,t3=0;

unsigned int count=0;

void delays()//10ms延时子程序

{unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void start()

{

TMOD=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

ET0=1;

EA=1;

TR0=1;

}

void main()

{

start();

KEY_ADD=1;

KEY_DEC=1;

KEY_COM=1;

while(1){

if(!KEY_COM)

{

delays();

if(!KEY_COM)

{while(!KEY_COM);

flag++;if(flag==3)flag=0;

}

}

if(!KEY_ADD)

{

delays();

if(!KEY_ADD)

{

while(!KEY_ADD);

if(flag==1)

{hour++;if(hour==24)hour=0;}

if (flag==2)

{minute++;if(minute==60)minute=0;}

}

}

if(!KEY_DEC)

{

delays();

if(!KEY_DEC)

{while(!KEY_DEC);

if(flag==1)

{hour--;if(hour<0)hour=23;}

if(flag==2)

{minute--;if(minute<0)minute=59;}

}

}

}

}

void t0() interrupt 1

{

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

count++;

switch(i)

{case 0: {if(flag==1){t++;if(t==60)t=0; if(t<30) {P1=a[hour/10];duan=1;duan=0;P1=~0x01;wei=1;wei=0;}

else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[hour/10];duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } break;

case 1: {if(flag==1) {t1++;if(t1==60)t1=0; if(t1<30) {P1=a[hour%10];duan=1;duan=0;P1=~0x02;wei=1;wei=0;}

else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[hour%10];duan=1;duan=0;P1=~0x02;wei=1;wei=0;} } break;

case 2:{P1=0x40;duan=1;duan=0;P1=~0x04;wei=1;wei=0;}break;

case 3: {if(flag==2) {t2++;if(t2==60)t2=0; if(t2<30) {P1=a[minute/10];duan=1;duan=0;P1=~0x08;wei=1;wei=0;}

else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[minute/10];duan=1;duan=0;P1=~0x08;wei=1;wei=0;} } break;

case 4: {if(flag==2) {t3++;if(t3==60)t3=0; if(t3<30) {P1=a[minute%10];duan=1;duan=0;P1=~0x10;wei=1;wei=0;}

else {P1=0x00;duan=1;duan=0;P1=~0x01;wei=1;wei=0;} } else {P1=a[minute%10];duan=1;duan=0;P1=~0x10;wei=1;wei=0;} } break;

case 5:{P1=0x40;duan=1;duan=0;P1=~0x20;wei=1;wei=0;}break;

case 6:{P1=a[second/10];duan=1;duan=0;P1=~0x40;wei=1;wei=0;}break;

case 7:{P1=a[second%10];duan=1;duan=0;P1=~0x80;wei=1;wei=0;}break;

}

i++;

if(i==8)i=0;

if(count==500)

{count=0;

second++;

if(second==60)

{second=0;

minute++;

if(minute==60)

{minute=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

}

}

#include<reg51h>

#define uchar unsigned char //unsigned char用uchar代替

#define uint unsigned int //同上

#define delay_time 3/宏定义/ // delay_time =3

uchar k,dat[]={0,0,0,0,0,0,0,0};

uint tcount,t,u;

uchar dat1[]={0,0,0,0,0,0,2,1};

uchar dat2[]={0,0,0,0,0,0,0,0};

uchar alarms[]={0,0,0,0,0,0,0,0};

uchar dis_bit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

unsigned char code SEG7[11]={0xC0,/0/ //共阳极数码管的显示

0xF9,/1/

0xA4,/2/

0xB0,/3/

0x99,/4/

0x92,/5/

0x82,/6/

0xF8,/7/

0x80,/8/

0x90,/9/

0xBF,/-/ };/数字显示数组/

sbit miaobiao1=P1^0;//根据仿真实现是端口定义

sbit thour=P1^1;

sbit tminute=P1^2;

sbit xianshi=P1^3;

sbit alarm=P1^4;

sbit pause=P1^5;/端口定义/

uchar ms=0;

uchar flag=0;

uchar sec=0;

uchar minit=0;

struct time{uchar second;uchar minute;uchar hour;}time1;

uchar n,i;

void delay(n)

{while(n--)

{ for(i=120;i>0;i--); }

}/延时子程序/

void modify(void) //flag是标志位 其值不同时处理不同的事情

{

EA=0;//关总中断

if(thour==0)

{

if(flag==0)

{

dat1[6]++;delay(280);//小时的显示 dat1[6] 为低位dat1[7]高位

if(dat1[6]>9) { dat1[6]=0;dat1[7]++;}

else if((dat1[7]>1)&&(dat1[6]>3)){dat1[7]=0; dat1[6]=0;}

}

if(flag==1)

{

alarms[6]++;delay(300);

if(alarms[6]>3&&alarms[7]==2)

{

alarms[6]=0;alarms[7]=0;}

if(alarms[6]>9)

{

alarms[6]=0;alarms[7]++;}

dat[6]=alarms[6];

dat[7]=alarms[7];

}

}

if(tminute==0)

{

if(flag==0)

{

dat1[3]++;delay(280);

if(dat[3]>=9)

{

dat1[4]++;dat1[3]=0;

if(dat1[4]>5) {dat1[4]=0;}

}

time1minute=10dat1[4]+dat1[3];//分钟的显示

}

if(flag==1)

{

alarms[3]++; delay(300);

if(alarms[3]>9)

{

alarms[4]++;alarms[3]=0;

if(alarms[4]>5){alarms[4]=0;}

}

dat[3]=alarms[3];

dat[4]=alarms[4];

}

}

if(miaobiao1==0){TR0=0;ET0=0;TR1=1;ET1=1;}//关定时器T0开定时器T1

if(xianshi==0)

{

TR0=1;ET0=1;TR1=0;ET1=0;//关定时器T1开定时器T0 处理定时器

;} dat2[0]=0;

dat2[1]=0;

dat2[3]=0;

dat2[4]=0;

dat2[6]=0;

dat2[7]=0;

ms=0;

sec=0;

minit=0;

}

if(pause==0){TR0=0;ET0=0;TR1=0;ET1=0;}//按下此键后 关闭定时器T0 T1

if(alarm==0)//这个键表示初始化状态

{

TR0=0;ET0=0;TR1=0;ET1=0;flag=1;//处理标志位

dat[0]=0;

dat[1]=0;

dat[2]=10;//表示‘—’

dat[3]=0;

dat[4]=0;

dat[5]=10;

dat[6]=0;

dat[7]=0;

}

EA=1;//开总中断

}/按键扫描/

你这个程序的结构不怎么清楚 就没怎么特别看 下面程序 后面有解释哈 比较清楚你看看 希望会对你有帮助 我现在也在努力学习中

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

/定义管脚/

sbit RELAY=P1^0;

sbit LED1=P1^1;

sbit LED2=P1^2;

sbit LED3=P1^3;

sbit LED4=P1^4;

sbit LED5=P1^5;

sbit LED6=P1^6;

sbit LED7=P1^7;

sbit Line1=P2^1;

sbit Line2=P2^0;

/定义缓冲区及初始化/

uchar data TimeTab[6]={0x06,0x5b,0x4f,0x66};

uchar data Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/定义参数及初始化/

char hour=12,minute=34,second=0;

uchar Keyno=0;

uchar num=0,count=0;

uchar STATE=0;

/

延时子函数

/

void Delay( uint x) //自定义延时约01ms

{

uint t;

while(--x)

for(t=0;t<120;t++)

;

}

//

/ 刷新缓冲区子程序 /

//

void RefreshTab(void)

{

TimeTab[0]=Tab[hour/10];

TimeTab[1]=Tab[hour%10];

TimeTab[2]=Tab[minute/10];

TimeTab[3]=Tab[minute%10];

}

//

/ 按键处理子程序 /

//

void Key_Process(void)

{

switch(STATE)

{

case 0: if(Keyno==1){STATE=1;}

break;

case 1: if(Keyno==2){hour++;if(hour==24)hour=0;}

if(Keyno==3){hour--;if(hour==-1)hour=23;}

if(Keyno==1){STATE=2;}

break;

case 2: if(Keyno==2){minute++;if(minute==60)minute=0;}

if(Keyno==3){minute--;if(minute==-1)minute=59;}

if(Keyno==1){STATE=0;}

break;

default: break;

}

}

//

/ 数码管显示子程序 /

//

void SEG_Display(void)

{

P0=TimeTab[num];

}

//

/ LED显示子程序 如果只是数字钟 这可以不用管 /

//

void LED_Display(void)

{

switch(STATE)

{

case 0: LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;break;

case 1: LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;break;

case 2: LED3=1;LED2=0;LED4=0;LED5=0;LED6=0;LED7=0;break;

default: break;

}

}

//

/ 主程序 /

//

void main(void)

{

P1=0x00;

EA=1;

TMOD |=0x01;//定时器0计时50ms in 12M crystal

TH0=0x3C; //初值

TL0=0xB0;

ET0=1;

TR0=1;

TMOD |=0x10; //定时器1用于动态扫描

TH1=0xFa; //初值

TL1=0xF0;

ET1=1;

TR1=1;

while(1)

{

RefreshTab();

LED_Display();

if(!Line1||!Line2){Delay(200);Key_Process();}

}

}

//

/ 定时器0中断用于计时 /

//

void Timer0(void) interrupt 1

{

TH0=0x3C; //重新赋值50ms溢出

TL0=0xB0;

count++;

if(count==10)

LED1=~LED1;

if (count==20)

{

count=0;

second++; //秒加1

if(second==60)

{

second=0;

minute++; //分加1

if(minute==60)

{

minute=0;

hour++; //时加1

if(hour==24)

{

hour=0;

}

}

}

}

}

//

/ 定时器1中断扫描显示+键值判断 /

//

void Timer1(void) interrupt 3

{

TH1=0xFa; //定时2ms显示下一个数码管

TL1=0xF0;

switch(num)

{

case 0: P2=0x0f;

if(!Line1)Keyno=1;

if(!Line2)Keyno=6;

SEG_Display();

break;

case 1: P2=0x1f;

if(!Line1)Keyno=4;

if(!Line2)Keyno=5;

SEG_Display();

break;

case 2: P2=0x2f;

if(!Line1)Keyno=3;

if(!Line2)Keyno=12;

SEG_Display();

break;

case 3: P2=0x3f;

if(!Line1)Keyno=7;

if(!Line2)Keyno=8;

SEG_Display();

break;

case 4: P2=0x4f;

if(!Line1)Keyno=2;

if(!Line2)Keyno=9;

SEG_Display();

break;

case 5: P2=0x5f;

if(!Line1)Keyno=10;

if(!Line2)Keyno=11;

SEG_Display();

break;

default: break;

}

num++;

if(num==6)

num=0;

}

你所有调用display()和 delay()函数时候都没在后面加个分号。漏了还是???

还有:

uchar code table[]={ //显示编码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71}

也应该在后面加个分号!!

你的分不好拿啊,该用分号的不用,不该用的地方用了,还有括号你用了很多中文的括号。

现在帮你改了,你自己好好对一下了,反正编译通过了,运行结果你自己看吧,我没你的目标板,运行不了。

#include<reg51h>

#define uchar unsigned char//宏定义

#define uint unsigned int

sbit dula=P2^6; //段控制位

sbit wela=P2^7; //位控制位

uchar miao,fen,aa,n1,n2,n3,n4;

uchar code table[]={ //显示编码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint z); //延时程序声明

void init(void);//初始化程序声明

void display(uchar n1 ,uchar n2,uchar n3,uchar n4); //显示程序声明

void main() //主程序

{

init(); //调用初始化程序

while(1) //进入大循环

{

if(aa==20) //判断是否到了1S

{

miao++; //秒数加1

if(miao==60) //判断是否到了60秒

{

miao=0; //秒数清0

fen++; //分数加1

if(fen==60) //判断是否到了60分

{

fen=0; //分数到60则清0

}

n1=fen/10; //第一个数码管显示分的十位

n2=fen%10; //第二个数码管显示分的个位

n3=miao/10; //第三个数码管显示秒的十位

n4=miao%10; //第四个数码管显示秒的个位

}

display(n1,n2,n3,n4);

}

}

}

void delay(uint z) //延时程序

{

uint x,y;

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

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

}

void display(uchar n1 ,uchar n2,uchar n3,uchar n4)

{

dula=1; //开段选

P0=table[n1]; //送分的十位

dula=0; //关段选

P0=0xff; //消隐

wela=1; //开位选

P0=0xfe; //选通分的十位

wela=0; //关位选

P0=0xff; //消隐

delay(1); //延时

dula=1; //开段选

P0=table[n2]; //送分的个位

dula=0; //关段选

P0=0xff; //消隐

wela=1; //开位选

P0=0xfd; //选通分的个位

wela=0; //关位选

P0=0xff; //消隐

delay(1); //延时

dula=1; //开段选

P0=table[n3]; //送秒的十位

dula=0; //关段选

P0=0xff; //消隐

wela=1; //开位选

P0=0xfb; //选通秒的十位

wela=0; //关位选

P0=0xff; //消隐

delay(1); //延时

dula=1; //开段选

P0=table[n4]; //送秒的个位

dula=0; //关段选

P0=0xff; //消隐

wela=1; //开位选

P0=0xf7; //选通秒的个位

wela=0; //关位选

P0=0xff; //消隐

delay(1); //延时

}

void init(void)

{

}

void timer0(void) interrupt 1 using 1

{

TH0=(65536-50000)/256; //求模

TL0=(65536-50000)%256; //求余

aa++;

}

以上就是关于用C语言编写AT89C51单片机程序,设计一个智能数字钟。全部的内容,包括:用C语言编写AT89C51单片机程序,设计一个智能数字钟。、用单片机写一个C语言程序关于电子时钟,用键盘调制时分秒的加减 第一个键控制模式,第二个为加,第三个减、求高手帮忙注释下51的数字电子钟C语言程序~~~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9702573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存