標題:
時鐘程序高級版(忙里偷閑的作品)
[打印本頁]
作者:
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.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1