能不能不用硬件做一个数字电子钟呢?对于这个问题的回答是完全十分的肯定回答.是完全可以的,下面的这个程序就是作者编的电子显示钟的完全程序,拿出来与各位同行们一起来欣赏:
#include <reg52.h>
/*#include <absacc.h>
#define P8155CTR XBYTE[0x0000]
#define BIT_LED XBYTE[0x0001]
#define SEG_LED XBYTE[0x0002]
*/
#define uchar unsigned char
#define uint unsigned int
#define fosc 12 /*晶振频率*/
#define time0 2500 /*定时2500us;*/
uchar data disp_bit,disp_buff[8];
uchar time0_h,time0_l;display_bit;
uint idata time0_times,bitcount=0;
uchar c[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //.gfedcba
uchar hour="14",min=32,sec=56;
void update()
{
disp_buff[0]=c[hour/10];
disp_buff[1]=c[hour%10];
disp_buff[2]=0xbf;
disp_buff[3]=c[min/10];
disp_buff[4]=c[min%10];
disp_buff[5]=0xbf;
disp_buff[6]=c[sec/10];
disp_buff[7]=c[sec%10];
}
void main()
{
uint timecount="0";
uchar k="0";
update();
/* P8155CTR=0x4f; */
TMOD="0x01";
time0_times=65536-time0*fosc/12;
time0_h=time0_times/256;
time0_l=time0_times%256;
TR0=1;
display_bit=0x80;
while(1)
{
if(TF0)
{
TF0=0;
TH0=time0_h;
TL0=time0_l;
// BIT_LED=0xff; /*关显示*/
/* SEG_LED=disp_buff[bitcount];
BIT_LED=~display_bit;
*/
P0=disp_buff[bitcount];
P2=~display_bit;
if(display_bit==1) display_bit=0x80;
else display_bit>>=1;
bitcount++;
if (bitcount==8)bitcount=0;
timecount++;
if(timecount==400) /*2500us*400=1s,达到1秒*/
{
timecount="0";
sec++;
if(sec==60)
{
sec="0";min++;
if(min==60)
{
min="0";hour++;
if(hour==24) hour="0";
}
}
update();
}
}
}
}
文章评论(0条评论)
登录后参与讨论