单片机C语言该怎么编写时钟程序?

单片机C语言该怎么编写时钟程序?,第1张

这个是简单的数码管时钟显示如果有需要贺戚,我写过比较完善的1602显示时钟.显示控制年月日等等.#include\x0d\x0asbit Begin=P2^0\x0d\x0asbit Hour=P2^1\x0d\x0asbit Mus=P2^2\x0d\x0asbit End=P2^3\x0d\x0aunsigned char code Tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,\x0d\x0a0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40}\x0d\x0aunsigned char code num[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}\x0d\x0aunsigned char Time[]={0,0,16,0,0,16,0,0}\x0d\x0aunsigned char a\x0d\x0aunsigned int x,m,th\x0d\x0avoid init()\x0d\x0a{\x0d\x0a TMOD=0x01\x0d\x0a TH0=(65535/50000)/256\x0d\x0a TL0=(65535/50000)%256\x0d\x0a EA=1\x0d\x0a ET0=1\x0d\x0a TR0=1\x0d\x0a}\x0d\x0avoid delay(unsigned int z) \x0d\x0a{ \x0d\x0a unsigned int x,y\x0d\x0a for(x=zx>0x--)\x0d\x0a for(y=110y>0y--)\x0d\x0a}\x0d\x0aunsigned char keyboard()\x0d\x0a{\x0d\x0a if(Begin==0){\x0d\x0a delay(5)\x0d\x0a if(Begin==0)\x0d\x0a return 1\x0d\x0a }\x0d\x0a if(Hour==0){\x0d\x0a delay(30)\x0d\x0a if(Hour==0)\x0d\x0a return 2\x0d\x0a }\x0d\x0a if(Mus==0)\x0d\x0a return 3\x0d\x0a if(End==0)\x0d\x0a return 4\x0d\x0a}\x0d\x0avoid display()\x0d\x0a{\x0d\x0a unsigned char i for(i=0i=20)\x0d\x0a {\x0d\x0a x++\x0d\x0a m=x\x0d\x0a th=m/3600/判悉/设置禅冲陵小时\x0d\x0a Time[0]=th/10\x0d\x0a Time[1]=th%10\x0d\x0a m=m%3600 Time[2]=16 th=m/60//设置分钟\x0d\x0a Time[3]=th/10\x0d\x0a Time[4]=th%10\x0d\x0a m=m%60 Time[5]=16 th=m//设置秒\x0d\x0a Time[6]=th/10\x0d\x0a Time[7]=th%10 a=0\x0d\x0a }\x0d\x0a}

#define uchar unsigned char //  (先定义改谨一下方便使碰清用)

#define uint unsigned int

#define ulong unsigned long

#include <reg52.h>//包括一个52标准内核的头文件

uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

uchar code ziwei[]={0x10,0x20,0x40,0x80}

uchar *h,*m

uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec

sbit dp=P0^7

sbit k1=P3^2

sbit k2=P3^3

sbit k3=P3^4

sbit sound=P2^3

sfr ZIXING=0x80//p0口输出字形

sfr ZIWEI=0xa0//P2口输出字位

typedef enum //枚举类型:4种状态//

{

CLOCK,

SET_RING1,

SET_RING2,

MIAOBIAO_RUN,

}STATE

STATE status

typedef struct //定时时间的数据结构//

{

uchar hour

uchar min

}DINGSHI_TIME

DINGSHI_TIME dingshi_time[2]

#define NO_KEY -1 //定义一下方便使用

#define KEY_1 1

#define KEY_2 2

#define KEY_3 3

bit show_on_flag

//#######定时器T0中断服务程序########//

Timer0() interrupt 1

{

TH0=0x3cTL0=0xb4//50ms

ms_50++

if(ms_50==20) {sec++ms_50=0}

if(sec==60) {sec=0min++}

if(min==60) {min=0hour++}

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

}

//#######定时器T1中断笑歼前服务程序########//

Timer1() interrupt 3

{

TH1=0xd8TL1=0xf4//10ms

ms_10++

if(ms_10==100)

{

miaobiao_sec++

ms_10=0

}

if(miaobiao_sec==60)

miaobiao_sec=0

}

//##############数码管显示#####################//

show(uchar time_high,uchar time_low)

{

uchar m

uint n,k

k=time_high*1000/10+time_low

for(m=0m<4m++)

{

ZIXING=zixing[k%10]

if(ms_50<10)

dp=0

ZIWEI=~ziwei[m]

for(n=0n<500n++)

ZIXING=0xff

for(n=0n<100n++)

k=k/10

}

}

//显示 on 定时编号//

show_on(uchar id) //id:定时编号//

{

uchar m

uint n

for(m=0m<2m++)

{

ZIXING=zixing[id%10]

dp=0

ZIWEI=~ziwei[m]

for(n=0n<500n++)

ZIXING=0xff

for(n=0n<80n++)

id=id/10

}

ZIXING=0xc8//字母n//

ZIWEI=~ziwei[2]

for(n=0n<500n++)

ZIXING=0xff

for(n=0n<200n++)

ZIXING=0xc0//字母0//

ZIWEI=~ziwei[3]

for(n=0n<500n++)

ZIXING=0xff

for(n=0n<200n++)

}

/*************启动秒表***************/

void run_miaobiao()

{

ms_10=0

miaobiao_sec=0

TH1=0xd8//标准是0xd8e4

TL1=0xf4

// TR1=1//启动定时器1

}

显示秒表:

void show_miaobiao()

{

show(miaobiao_sec,ms_10)

}


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

原文地址:https://54852.com/yw/12520014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存