#include <reg51.h>
#define uchar unsigned char
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit led=P1^0;
unsigned int i,j,k,m,n,p,num,ni,nj,nk,nm,nn=2,np=1,set=1,set1=1,c;
char code tab[]={0xC0,0xF9,0xA4,
0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
void shezhishijian();
void shezhinaozhong();
void naoyin();
void key_change();
void key_change1();
void delay(int m) //延时程序,延时m*0.5ms
{
int x;
int y;
for (x=0;x<m;x++)
{
for(y=0;y<500;y++){}
}
}
void main()
{
TMOD=0x01; //设置定时器0的工作方式为1
TH0=(65536-65530)/256; //设置定时器的高位初值
TL0=(65536-65530)%256; //设置定时器的低位初值
EA=1; //打开总中断开关
ET0=1; //打开定时器中断
TR0=1; //启动定时器
P3=0xff;
led=0;
while(1){
key_change();
key_change1();
shezhishijian();
shezhinaozhong();
if(set==1) //正常显示
{P0=tab[i]; //秒的个位
P2=0xdf;
delay(1);
P2=0xff;
P0=tab[j]; //秒的十位
P2=0xef;
delay(1);
P2=0xff;
P0=tab[k]; //分的个位
P2=0xf7;
delay(1);
P2=0xff;
P0=tab[m]; //分的十位
P2=0xfb;
delay(1);
P2=0xff;
P0=tab[n]; //时的个位
P2=0xfd;
delay(1);
P2=0xff;
P0=tab[p]; //时的十位
P2=0xfe;
delay(1);
P2=0xff;}
if(set==2) //设置时间
{P0=tab[i]; //秒的个位
P2=0xdf;
delay(1);
P2=0xff;
P0=tab[j]; //秒的十位
P2=0xef;
delay(1);
P2=0xff;
P0=tab[k]; //分的个位
P2=0xf7;
delay(1);
P2=0xff;
P0=tab[m]; //分的十位
P2=0xfb;
delay(1);
P2=0xff;
P0=tab[n]; //时的个位
P2=0xfd;
delay(1);
P2=0xff;
P0=tab[p]; //时的十位
P2=0xfe;
delay(1);
P2=0xff;}
if(set==3) //显示定时
{P0=tab[ni]; //秒的个位
P2=0xdf;
delay(1);
P2=0xff;
P0=tab[nj]; //秒的十位
P2=0xef;
delay(1);
P2=0xff;
P0=tab[nk]; //分的个位
P2=0xf7;
delay(1);
P2=0xff;
P0=tab[nm]; //分的十位
P2=0xfb;
delay(1);
P2=0xff;
P0=tab[nn]; //时的个位
P2=0xfd;
delay(1);
P2=0xff;
P0=tab[np]; //时的十位
P2=0xfe;
delay(1);
P2=0xff;}
if(set==4) //设置闹钟
{P0=tab[ni]; //秒的个位
P2=0xdf;
delay(1);
P2=0xff;
P0=tab[nj]; //秒的十位
P2=0xef;
delay(1);
P2=0xff;
P0=tab[nk]; //分的个位
P2=0xf7;
delay(1);
P2=0xff;
P0=tab[nm]; //分的十位
P2=0xfb;
delay(1);
P2=0xff;
P0=tab[nn]; //时的个位
P2=0xfd;
delay(1);
P2=0xff;
P0=tab[np]; //时的十位
P2=0xfe;
delay(1);
P2=0xff;}
naoyin();
}
}
nnn() interrupt 1
{
TH0=(65536-65530)/256; //设置定时器的高位初值
TL0=(65536-65530)%256; //设置定时器的低位初值
c++;
if(c==20)
{c=0;
i++;
if(i==10) {j++;i=0;} //秒的个位
if(j==6) {k++;i=0;j=0;} //秒的十位
if(k==10) {m++;k=0;i=0;j=0;} //分的个位
if(m==6) {n++;m=0;k=0;i=0;j=0;} //分的十位
if(n==10) {p++;n=0;m=0;k=0;i=0;j=0;} //时的个位
if(p==2&n==4) {p=0;n=0;m=0;k=0;i=0;j=0;} //时的十位
}}
void key_change() //set加1
{
if(k1==0)
{
delay(20);
if(k1==0)
{
set++;
while(!k1);
if(set==5)
{set=1;}
}
}
}
void key_change1() //set1加1
{
if(k2==0)
{
delay(20);
if(k2==0)
{
set1++;
while(!k2);
if(set1==7)
{set1=1;}
}
}
}
uchar add(uchar n) //加1函数
{
if(k3==0)
{delay(20);
if(k3==0)
{
n++;
while(!k3);
}
}
return(n);
}
void shezhishijian() //设置时间
{
if(set==2)
{
if(set1==1)
{i=add(i);if(i==10) {i=0;}} //设置秒的个位
if(set1==2) //设置秒的十位
{j=add(j);if(j==6) {j=0;}}
if(set1==3) //设置分的个位
{k=add(k);if(k==10) {k=0;}}
if(set1==4)
{m=add(m);if(m==6) {m=0;}} //设置分的十位
if(set1==5) //设置时的个位
{n=add(n);if(n==10) {n=0;}}
if(set1==6) //设置时的十位
{p=add(p);if(p==3) {p=0;}}}}
void shezhinaozhong() //设置闹钟
{
if(set==4)
{
if(set1==1)
{ni=add(ni);if(ni==10) {ni=0;}} //设置秒的个位
if(set1==2) //设置秒的十位
{nj=add(nj);if(nj==6) {nj=0;}}
if(set1==3) //设置分的个位
{nk=add(nk);if(nk==10) {nk=0;}}
if(set1==4)
{nm=add(nm);if(nm==6) {nm=0;}} //设置分的十位
if(set1==5) //设置时的个位
{nn=add(nn);if(nn==10) {nn=0;}}
if(set1==6) //设置时的十位
{np=add(np);if(np==3) {np=0;}}}}
void naoyin()//闹钟声音
{
if((i==ni)&&(j==nj)&&(k==nk)&&(m==nm)&&(n==nn)&&(p==np))
{
led=0;
delay(30);
led=1;
delay(30);
led=0;
delay(30);
led=1;
delay(30);
led=0;
delay(30);
led=1;
delay(900);
}
}
时钟系统设计(单片机课程设计)
需积分: 3 51 浏览量
2011-04-06
21:25:13
上传
评论
收藏 24KB RAR 举报
tootoo1987
- 粉丝: 0
- 资源: 12
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈