编写一个C语言闹钟程序

编写一个C语言闹钟程序,第1张

2楼说的创建一个线程查询系统时间 ,就是一个查询算法,时间本来就是1~60秒排好序的,那就用2分法排序吧,快又简单,然后当系统时间==闹钟事件i,就开始闹

就这样,2分算法要是还不会就用冒泡法吧,嘿嘿

#include<reg52h>

#include<intrinsh>

#include<mathh>

#define uchar unsigned char

#define uint unsigned int

#define rst573 P2&=0X1F

#define y4 P2|=0X80

#define y5 P2|=0XA0

#define y6 P2|=0XC0

#define y7 P2|=0XE0

sbit s5=P3^2;

sbit s4=P3^3;

sbit s6=P3^1;

sbit s7=P3^0;

sbit scl=P1^7;

sbit IO=P2^3;

sbit rst1302=P1^3;

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

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

uchar time[8]={0xa4,0xb0,0xbf,0x90,0x90,0xbf,0xc0,0xc0};

uchar miao1,miao2,fen1,fen2,shi1,shi2,shi,fen;

void delay(uint z)

{

uint i,j;

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

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

}

void writebyte(uchar add,uchar date)

{

uchar i;

scl=0;

IO=0;

rst1302=1;

for(i=0;i<8;i++)

{

scl=0;

IO=add&0x01;

scl=1;

add>>=1;

}

for(i=0;i<8;i++)

{

scl=0;

IO=date&0x01;

scl=1;

date>>=1;

}

rst1302=0;

}

uchar readbyte(uchar add)

{

uchar i,temp;

scl=0;

IO=0;

rst1302=1;

for(i=0;i<8;i++)

{

scl=0;

IO=add&0x01;

scl=1;

add>>=1;

}

for(i=0;i<8;i++)

{

scl=1;

temp>>=1;

scl=0;

if(IO)

temp|=0x80;

}

return temp;

}

void set1302()

{

writebyte(0x8e,0x00);

writebyte(0x84,0x00);

writebyte(0x82,0x00);

writebyte(0x80,0x00);

writebyte(0x8e,0x80);

}

void read1302(uchar p)

{

p[0]=readbyte(0x85);

writebyte(0x84,0x00);

p[1]=readbyte(0x83);

writebyte(0x82,0x00);

p[2]=readbyte(0x81);

writebyte(0x00,0x00);

}

void zhuanghuan()

{

shi=time[0];

fen=time[1];

miao1=(time[2]/16)%10;

miao2=(time[2]%16)%10;

}

void display()

{

rst573;

P0=chu[0];

y6;

rst573;

P0=tab[shi>>4];

y7;

delay(2);

rst573;

P0=chu[1];

y6;

rst573;

P0=tab[shi&0x0f];

y7;

delay(2);

rst573;

P0=chu[3];

y6;

rst573;

P0=tab[fen>>4];

y7;

delay(2);

rst573;

rst573;

P0=chu[4];

y6;

rst573;

P0=tab[fen&0x0f];

y7;

delay(2);

rst573;

P0=chu[6];

y6;

rst573;

P0=tab[miao1];

y7;

delay(2);

rst573;

P0=chu[7];

y6;

rst573;

P0=tab[miao2];

y7;

delay(2);

rst573;

P0=chu[2];

y6;

rst573;

P0=0xbf;

y7;

delay(2);

rst573;

P0=chu[5];

y6;

rst573;

P0=0xbf;

y7;

rst573;

delay(1);

read1302(time);

zhuanghuan();

}

void jian()

{

if(s4==0)

{

delay(5);

if(s4==0)

{

while(!s4)

display();

writebyte(0x8e,0x00);

shi++;

if(shi==10) //对应BCD的0~9

shi=16;

if(shi==26) //对应BCD的10~19

shi=32;

if(shi==36) //对应BCD的19~23

shi=0;

writebyte(0x84,shi);

}

}

if(s5==0)

{

delay(5);

if(s5==0)

{

while(!s5)

display();

writebyte(0x8e,0x00);

shi--;

if(shi==-1) //对应BCD的23~20

shi=35;

if(shi==31) //对应BCD的19~10

shi=25;

if(shi==15) //对应BCD的9~0

shi=9;

writebyte(0x84,shi);

}

}

if(s6==0)

{

delay(5);

if(s6==0)

{

while(!s6)

display();

writebyte(0x8e,0x00);

fen++;

if(fen==10) //对应BCD的0~9

fen=16;

if(fen==26) //对应BCD的10~19

fen=32;

if(fen==42) //对应BCD的20~29

fen=48;

if(fen==58) //对应BCD的30~39

fen=64;

if(fen==74) //对应BCD的40~49

fen=80;

if(fen==90) //对应BCD的50~59

fen=0;

writebyte(0x82,fen);

}

}

if(s7==0)

{

delay(5);

if(s7==0)

{

while(!s7)

display();

writebyte(0x8e,0x00);

fen--;

if(fen==-1) //对应BCD的59~50

fen=89;

if(fen==79) //对应BCD的49~40

fen=73;

if(fen==63) //对应BCD的39~30

fen=57;

if(fen==47) //对应BCD的29~20

fen=41;

if(fen==31) //对应BCD的19~10

fen=25;

if(fen==15) //对应BCD的9~0

fen=9;

writebyte(0x82,fen);

}

}

}

void main()

{

set1302();

while(1)

{

jian();

display();

}

}

我来发一个C语言51单片机时钟程序,希望能帮到你

/ 程序功能:带定时闹铃时钟                                      /

/---------------------------------------------------------------/

#include <AT89X51H>    /包含器件配置文件/

#define uchar unsigned char

#define uint unsigned int

char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90,};/0~9的数码管段码/

uchar hour=0,min=0,sec=0;   /时、分、秒单元清零/

uchar deda=0;        /5mS计数单元清零/

bit d_05s=0;               /05秒标志/

uchar set=0;      /模式设定标志/

uchar m=0;

uchar flag=0;      /RAM掉电标志/

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

void conv();         /走时单元转换/

void disp();      /走时时间显示函数/

/------------------------走时函数部分 ----------------------/

/定时器T0  5mS初始化/

void init_timer()

{

TMOD=0x01;

TH0=-(4800/256);

TL0=-(4800%256);

IE=0x82;

TR0=1;

}

/---------------------------------/

/5mS定时中断服务函数/

void T0_srv(void) interrupt 1

{

TH0=-(4800/256);

TL0=-(4800%256);

deda++;

}

/----------------------------------/

/时、分、秒单元及走时单元转换/

void conv()

{

if(deda<=100)d_05s=0;

else d_05s=1;

if(deda>=200){sec++;deda=0;}

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

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

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

}

/------------------------ 显示函数部分 ----------------------/

/走时时间显示函数/

void disp()

{

P0=DATA_7SEG[hour/10];P2=0xf7;delay(1);

P0=DATA_7SEG[hour%10];P2=0xfb;delay(1);

if(d_05s==1){if(P2_2==0)P0_7=0;else P0_7=1;}

delay(1);

P0=DATA_7SEG[min/10];P2=0xfd;delay(1);

P0=DATA_7SEG[min%10];P2=0xfe;delay(1);

}

/---------------------- 调整时间函数部分 -------------------/

/调整走时时间/

void set_time()

{uchar m;

if(P2_5==0)delay(1);

if(P2_5==0)hour++;

if(hour==24)hour=0;

for(m=0;m<30;m++)

{

disp();

if(P2_2==0)P0_7=0;

else P0_7=1;

delay(1);

}

if(P2_6==0)delay(1);

if(P2_6==0)min++;

if(min==60)min=0;

for(m=0;m<30;m++)

{

disp();

if(P2_2==0)P0_7=0;

else P0_7=1;

delay(1);

}

}

/------------------ 按键扫描、延时等函数部分-------------------/

/走时时间程序函数/

void time()

{

conv();    / 走时单元转换函数  /

disp();    / 走时时间显示函数  /

}

/------------------------------------/

/扫描按键函数/

void scan_key()

{

delay(1);

if(P2_4==0)set++;

if(set>=2)set=0;

if(set==1)flag=0x55;

F0:if(P2_4==0)goto F0; /按键未释放,在此等候/

}

/------------------------------/

/延时函数/

void delay(uint k)

{

uint i,j;

for(i=0;i<k;i++){

for(j=0;j<121;j++)

{;}}

}

/----------------------- 主函数 ------------------------- /

/主函数/

void main()

{

init_timer();             /定时器T0初始化/

while(1)     /无限循环/

{

if(P2_4==0)scan_key();   /有按键,调用按键扫描函数/

switch(set)      /根据set键值散转/

{

case 0:time();  break;    /走时时间程序/

case 1:set_time();break;       /走时时间调整/

default:break;     /其它退出/

}

if(flag!=0x55)          /判断掉电标志/

{

P0=0xc0; P2=0xc0; delay(100);

P2=0xff; delay(400);

}

}

}

1、闹钟设置界面。

2、存储响闹时间。

3、时间中断,设置读取时间的flag

4、主程序中判断flag设置,读取时钟。

5、比较当前时钟在响闹时间范围内,输出闹铃(如果是蜂鸣器,给他一个输出频率的信号)。

以上就是关于编写一个C语言闹钟程序全部的内容,包括:编写一个C语言闹钟程序、基于51单片机电子闹钟的设计,用C语言,跪求高手、求一个51单片机定时闹钟程序。要C语言。能够调时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9271338.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存