
#include <at89x52h>
#include <DS1302h>
//定义共阳极字型码0123456789-
unsigned char code dispcode[]=;
unsigned char time[]=;//用来储存时间
unsigned char date[]=;//用来储存日期
unsigned char year[]=;//用来储存年份
unsigned char week[]=;//用来储存星期
SYSTEMTIME time1; //在ds1302h文件中已经定义了一个名字为SYSTEMTIME的结构体,在这里我们定义一个变量名
//为time的SYSTEMTIME结构体
void delay(unsigned char i) //延时子程序
{
unsigned char j;
while((i--)!=0)
{
for(j=123;j>0;j--);
}
}
unsigned char button_time(n,x,y) //时钟调整子程序
unsigned char n,x,y;
{
if(P1_7==0)
{
delay(50);
if(P1_7==0)
{
n++;
if(n==x)
n=0;
while(P1_7==0); //等待按键释放
}
}
if(P1_5==0)
{
delay(50);
if(P1_5==0)
{
if(n==0)
n=y;
else
n--;
while(P1_5==0);
}
}
return n;
}
unsigned char button_date(n,x,y) //日期调整子程序
unsigned char n,x,y;
{
if(P1_7==0)
{
delay(50);
if(P1_7==0)
{
n++;
if(n==x)
n=1;
while(P1_7==0);
}
}
if(P1_5==0)
{
delay(50);
if(P1_5==0)
{
if(n==1)
n=y;
else
n--;
while(P1_5==0);
}
}
return n;
}
unsigned char button_year(n,x,y) //年份调整子程序
unsigned char n,x,y;
{
if(P1_7==0)
{
delay(50);
if(P1_7==0)
{
n++;
if(n==x)
n=2;
while(P1_7==0);
}
}
if(P1_5==0)
{
delay(50);
if(P1_5==0)
{
if(n==2)
n=y;
else
n--;
while(P1_5==0);
}
}
return n;
}
void display(minute10,minute1,hour10,hour1) //显示子程序
unsigned char minute10,minute1,hour10,hour1;
{
P2=0xfe;
P0=dispcode[minute10];//显示分的十位
delay(1);
P2=0xfd;
P0=dispcode[minute1]; //显示分的个位
delay(1);
P2=0xfb;
P0=dispcode[hour10]; //显示时的十位
delay(1);
P2=0xf7;
P0=dispcode[hour1]; //显示时的个位
delay(1);
}
void display1(week1)
unsigned char week1;
{
P2=0xef;
P0=dispcode[week1];
delay(1);
}
void main()
{
unsigned char flag,aa=2,bb=0;
Initial_DS1302(); //初始化DS1302这个时钟芯片,
while(1)
{
DS1302_GetTime(&time1); //读取时间参数
time[3]=(time1Minute)%10; //把分的个位数据存入time[3]
time[2]=(time1Minute)/10; //把分的十位数据存入time[2]
time[1]=(time1Hour)%10; //把时的个位数据存入time[1]
time[0]=(time1Hour)/10; //把时的十位数据存入time[0]
date[3]=(time1Day)%10;
date[2]=(time1Day)/10;
date[1]=(time1Month)%10;
date[0]=(time1Month)/10;
year[1]=(time1Year)%10;
year[0]=(time1Year)/10;
week[0]=(time1Week);
display1(week[0]); //显示星期
if(P1_4==0) //如果按下Time Start键一下,时钟开始正常显示时间,再按一下,显示日期,再按一下,显示年份
{
delay(50);
if(P1_4==0)
{
flag++;
if(flag>2)
{
flag=0;
}
}
while(P1_4==0);
}
if(P1_6==0) //如果按下Time Set键一下,开始显示日期,再按一下开始显示年份,再按一下,进入年份,日期,星期和时间的调节模式
{
delay(50);
if(P1_6==0)
{
flag++;
if(flag>8)
{
flag=0;
}
}
while(P1_6==0);
}
switch(flag)
{
case 0:display(time[0],time[1],time[2],time[3]); //调用子函数display,把存入数组time的数据给显示出来
break;
case 1:display(date[0],date[1],date[2],date[3]); //调用子函数display,把存入数组date的数据给显示出来
break;
case 2:display(aa,bb,year[0],year[1]); //调用子函数display,把存入数组year的数据给显示出来
break;
case 3:time1Year=button_year(time1Year,2099,2098); //调整年
DS1302_SetTime(0x8c,time1Year);
display(aa,bb,year[0],year[1]);
break;
case 4:time1Month=button_date(time1Month,13,12); //调整月
DS1302_SetTime(0x88,time1Month);
display(date[0],date[1],10,10);
break;
case 5:time1Day=button_date(time1Day,32,31); //调整日
DS1302_SetTime(0x86,time1Day);
display(10,10,date[2],date[3]);
break;
case 6:time1Week=button_date(time1Week,8,7); //调整星期
DS1302_SetTime(0x8a,time1Week);
display1(week[0]);
break;
case 7:time1Hour=button_time(time1Hour,24,23); //调整时
DS1302_SetTime(0x84,time1Hour);
display(time[0],time[1],10,10);
break;
case 8:time1Minute=button_time(time1Minute,60,59); //调整分
DS1302_SetTime(0x82,time1Minute);
display(10,10,time[2],time[3]);
break;
}
}
}
程序员联合开发网上有:>
#include<reg52h>
#include<absacch>
#include<intrinsh>
#define unit unsigned int
#define uchar unsigned char
//#define HZ 12
sbit key0=P0^0; // 分钟调整
sbit key1=P0^1; // 小时调整
sbit P2_0=P2^7; //秒 指示灯
sbit MN_RXD=P3^6;
sbit MN_TXD=P3^7;
uchar data CLOCK[4]={0,0,0,12};//存放时钟时间(百分秒,秒,分,和时位)
//数码管显示表0-f 灭
uchar code TABLE[]={0xBE,0x06,0xEA,0x6E,0x56,0x7C,0xFC,0x0E,0xFE,0x7E,0x00};
//
//模拟串口发送一个字节数据 函数
//
void SendData(unsigned char senddata)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((senddata&0x01)==0)
MN_RXD=0;
else
MN_RXD=1;
_nop_();
MN_TXD=0;
_nop_();
MN_TXD=1;
senddata=senddata>>1;
}
}
//
//显示程序函数
//
void display(void)
{
// unsigned int n;
uchar temp;
temp=CLOCK[1]; temp=temp%10; SendData(TABLE[temp]);
temp=CLOCK[1]; temp=temp/10; SendData(TABLE[temp]);
temp=CLOCK[2]; temp=temp%10; SendData(TABLE[temp]);
temp=CLOCK[2]; temp=temp/10; SendData(TABLE[temp]);
temp=CLOCK[3]; temp=temp%10; SendData(TABLE[temp]);
temp=CLOCK[3]; temp=temp/10; SendData(TABLE[temp]);
/
for(n=0;n<5000;n++);
for(n=0;n<6;n++)
{
SendData(TABLE[10]);
}
/
}
//
//按键控制函数
//
void keycan()
{
unsigned int n;
EA=0;
if(key0==0) // 分钟调整
{
for(n=0;n<10000;n++); //延时去抖动
while(key0==0);
CLOCK[2]=CLOCK[2]+1;
if(CLOCK[2]==60) //到一时
{
CLOCK[2]=0;
}
display();
}
if(key1==0) // 小时调整
{
for(n=0;n<10000;n++); //延时去抖动
while(key1==0);
CLOCK[3]=CLOCK[3]+1;
if(CLOCK[3]==24)
{
CLOCK[3]=0;
}
display();
}
EA=1;
}
//
//T0中断服务函数
//
void time0() interrupt 1 //using 1
{
TH0=0xD8; TL0=0xF0; //重置初值
// TH0=0xB1; TL0=0xE0;
//时钟处理
CLOCK[0]=CLOCK[0]+1;
}
//
//主函数
//
void main()
{
EA=1;
ET0=1;
TMOD=0x01; //T0方式1定时
TH0=0xD8; TL0=0xF0; //D8F0 定时10ms
// TH0=0xB1; TL0=0xE0; //定时 20ms
TR0=1;
for(;;)
{
if(CLOCK[0]==100) //到一秒 10ms100
{
CLOCK[0]=0;
P2_0=~P2_0;
CLOCK[1]=CLOCK[1]+1;
if(CLOCK[1]==60) //到一分
{
CLOCK[1]=0;
CLOCK[2]=CLOCK[2]+1;
if(CLOCK[2]==60) //到一时
{
CLOCK[2]=0;
CLOCK[3]=CLOCK[3]+1;
if(CLOCK[3]==24)
{
CLOCK[3]=0;
}
}
}
display();
}
keycan();
}
}
我来发一个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);
}
}
}
以上就是关于c语言 提示时间 程序(带声音提示时间、就是闹铃)要在DOS在运行的。做好了加50分全部的内容,包括:c语言 提示时间 程序(带声音提示时间、就是闹铃)要在DOS在运行的。做好了加50分、C语言编闹钟程序、求一个关于用C语言编写的电子时钟的程序,内容要有闹钟,可以调整时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)