?? standardtime.c
字號:
//QQ群:33495724 單片機 ARM FPGA 團隊全力打造技術聯盟
//實驗課題:標準時間
//編寫人:lc
//時間:2006.11.25.
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sfr p0=0x80;//初始化
sfr p1=0x90;
sfr p2=0xA0;
unsigned char code tab[10]={0xfc/*0*/,0x60/*1*/,0xda/*2*/,0xf2/*3*/,0x66/*4*/,
0xb6/*5*/,0xbe/*6*/,0xe0/*7*/,0xfe/*8*/,0xf6/*9*/};//段碼查表
uint addi=0; //標示相對50mS的20次中斷是否到達,到達就是一秒;
uchar hour=21;//時間初始化,其為全局變量!
uchar minute=38;
uchar second=20;
uchar templow,temphigh;//取十位,取個位
uchar displaylow(uchar middlenum1);//函數聲明
uchar displayhigh(uchar middlenum2);
void delay(uint num);
void fun_frabrication();
void t0_show() interrupt 1 using 0//TO中斷
{
TH0=(65536-50000)/256;//產生一次中斷,重新配置定時器預置值
TL0=(65536-50000)%256;
addi++;
if(addi==20){second+=1;addi=0;}
}
void displaysecond(uchar p_second)//秒顯
{
if(p_second<60||p_second==00)
{
p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
}
else
{
p_second=00;
second=00;
p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
minute+=1;
}
}
void displayminute(uchar p_minute)//分顯
{
if(p_minute<60||p_minute==00)
{
p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
}
else
{
p_minute=00;
minute=00;
p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
hour+=1;
}
}
void displayhour(uchar p_hour)//時顯
{
if(p_hour<24||p_hour==00)
{
p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
}
else
{
p_hour=00;
hour=00;
p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
}
}
uchar displaylow(uchar middlenum1)//顯十位通用包
{
templow=tab[middlenum1%10];
return(templow);
}
uchar displayhigh(uchar middlenum2) //顯示個位通用包
{
temphigh=tab[middlenum2/10];
return(temphigh);
}
void delay(uint num)//函數延遲程序包,可以通用;
{
uint i,j;
for(i=num;i>0;i--)
for(j=0;j<200;j++);
}
void fun_frabrication()//顯示函數封裝包,可以用在很多其他的時鐘設計當中;
{
displaysecond(second);
displayminute(minute);
displayhour(hour);
}
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0X82;
TR0=1;
while(1)
{
fun_frabrication();//將該顯示信號放里面就不會刷動了
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -