标题:
时钟程序高级版(忙里偷闲的作品)
[打印本页]
作者:
hutians
时间:
2015-2-10 17:53
标题:
时钟程序高级版(忙里偷闲的作品)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P2^0;
sbit duan=P2^1;
sbit k1=P1^0;
sbit k2=P1^1;
uchar table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
uchar num,num1,num2,shi,fen,miao,m,s;
// 定义
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
// 延时函数
void display_shi(uchar shi)
{
duan=1;
P0=table[shi/10];
duan=0;
wei=1;
P0=0xfe;
wei=0;
delay(1);
P0=0;
duan=1;
P0=table[shi%10];
duan=0;
wei=1;
P0=0xfd;
wei=0;
delay(1);
P0=0;
}
// 显示小时
void display_fen(uchar fen)
{
duan=1;
P0=table[fen/10];
duan=0;
wei=1;
P0=0xf7;
wei=0;
delay(1);
P0=0;
duan=1;
P0=table[fen%10];
duan=0;
wei=1;
P0=0xef;
wei=0;
delay(1);
P0=0;
}
// 显示分钟
void display_miao(uchar miao)
{
duan=1;
P0=table[miao/10];
duan=0;
wei=1;
P0=0xbf;
wei=0;
delay(1);
P0=0;
duan=1;
P0=table[miao%10];
duan=0;
wei=1;
P0=0x7f;
wei=0;
delay(1);
P0=0;
}
// 显示秒数
void display_sf()
{
duan=1;
P0=table[10];
duan=0;
wei=1;
P0=0xfb;
wei=0;
delay(1);
P0=0;
}
// 时与分间的横线
void display_fm()
{
duan=1;
P0=table[10];
duan=0;
wei=1;
P0=0xdf;
wei=0;
delay(1);
P0=0;
}
// 分与秒间的横线
void display_shi0()
{
duan=1;
P0=0;
duan=0;
wei=1;
P0=0x3f;
wei=0;
delay(1);
P0=0;
}
// 小时位置不显示
void display_fen0()
{
duan=1;
P0=0;
duan=0;
wei=1;
P0=0xe7;
wei=0;
delay(1);
P0=0;
}
// 分钟位置不显示
void display_miao0()
{
duan=1;
P0=0;
duan=0;
wei=1;
P0=0xfc;
wei=0;
delay(1);
P0=0;
}
// 秒位置不显示
void display_1()
{
display_shi(shi);
display_sf();
display_fen(fen);
display_fm();
display_miao(miao);
}
// 正常显示
void display_2()
{
if(m==1&&num2%2!=0)
{
display_shi(shi);
display_sf();
display_fen(fen);
display_fm();
display_miao0();
}
if(m==2&&num2%2!=0)
{
display_shi(shi);
display_sf();
display_fen0();
display_fm();
display_miao(miao);
}
if(m==3&&num2%2!=0)
{
display_shi0();
display_sf();
display_fen(fen);
display_fm();
display_miao(miao);
}
while(num2%2==0)
display_1();
}
// 设计时显示函数
void fun()
{
if(miao==60)
{
miao=0;
fen++;
}
if(fen==60)
{
fen=0;
shi++;
}
if(shi==24)
shi=0;
}
// 进位函数
void init()
{
shi=0;
fen=0;
miao=0;
m=0;
s=0;
num=0;
num1=0;
num2=0;
TMOD=0x01;
TH0=(65536-46074)/256; // 11.05768M.
TL0=(65536-46074)%256;
TH1=(65536-56074)/256;
TL1=(65536-56074)%256;
EA=1; // 打开中断允许
ET0=1;
ET1=1; // 开起计数器0
EX0=1;
TR0=1; // 开起定时器0
}
// 初始化函数
void keyboard()
{
if(k1==0)
delay(5);
if(k1==0)
{ TR0=0;
TR1=1;
m++;
if(m==4)
{
m=0;
TR1=0;
TR0=1;
}
while(!k1)display_1();
}
if(m!=0)
{
if(k2==0)
{
delay(5);
s=1;
if(m==1&&s!=0)
{
miao++;
s=0;
fun();
}
if(m==2&&s!=0)
{
fen++;
s=0;
fun();
}
if(m==3&&s!=0)
{
shi++;
s=0;
fun();
}
while(!k2)display_1();
}
}
}
// 键盘处理函数
void main()
{
init();
while(1)
{
keyboard();
if(num==20)
{
num=0;
miao++;
fun();
}
if(m!=0)
display_2();
else
display_1();
}
}
// 主函数
void time_0() interrupt 1
{
TH0=(65536-46074)/256;
TL0=(65536-46074)%256;
num++;
}
// 定时器1,非设计时使用
void time_1() interrupt 3
{
TH1=(65536-56074)/256;
TL1=(65536-56074)%256;
num1++;
if(num1==20)
{
num1=0;
num2++;
}
}
// 定时器2,设计时使用
这个程序虽比师哥的还差点,但是我会好好努力的!!
复制代码
作者:
w2015x
时间:
2015-2-16 15:34
下载下来来学习学习
作者:
小唐
时间:
2015-3-18 16:20
终于找到谢谢楼主
作者:
fontex
时间:
2015-3-20 13:55
能有线路图就好了。
作者:
南天白云
时间:
2015-3-24 16:02
请问楼主有线路图吗?还有是不是郭老师的?
作者:
days110002
时间:
2015-5-10 11:55
下来试试看
作者:
stxlpeng
时间:
2015-5-10 20:48
不错的程序,看看
作者:
micmiutom
时间:
2017-5-1 17:37
下载下来来学习学习
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1