#include <reg52.h>
#include "./delay/delay.h"
#define TIMEPORT P0
sbit bit_select = P2^0; //位锁存
sbit seg_select = P2^1; //段锁存
unsigned char timedata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //存放0~9的段码值
unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码
unsigned char clock_num[8]; //显示值
void display(unsigned char firstplace, unsigned char len);
void main()
{
unsigned char sec = 0; //秒的个位
unsigned char s_sec = 0; //秒的十位
unsigned char min = 5; //分的个位
unsigned char s_min = 5; //分的十位
unsigned char hour = 3; //时的个位
unsigned char s_hour = 2; //时的十位
unsigned char i;
while(1)
{
sec++;
if(10 == sec) //秒的个位计到10,进1并将个位清零
{
sec = 0;
s_sec++;
if(6 == s_sec) //秒的十位计到6,进1并将十位清零
{
s_sec = 0;
min++;
}
}
if(10 == min) //分的个位计到10,进1并将个位清零
{
min = 0;
s_min++;
if(6 == s_min) //分的十位计到6,进1并将十位清零
{
s_min = 0;
hour++;
}
}
if(10 == hour && s_hour != 2) //时的十位不为2时,当个位计到10,进1并将个位清零
{
hour = 0;
s_hour++;
}
if(2 == s_hour && 4 == hour) //24时清零
{
s_hour = 0;
hour = 0;
}
clock_num[0] = timedata[s_hour]; //时的十位
clock_num[1] = timedata[hour]; //时的个位
clock_num[2] = 0x40; //-
clock_num[3] = timedata[s_min]; //分的十位
clock_num[4] = timedata[min]; //分的个位
clock_num[5] = 0x40; //-
clock_num[6] = timedata[s_sec]; //秒的十位
clock_num[7] = timedata[sec]; //秒的个位
for(i = 0; i < 65; i++)
{
display(0,8); //输出显示
}
}
}
/*
==========================
功能:动态扫描,显示数据
==========================
*/
void display(unsigned char firstplace, unsigned char len)
{
unsigned char i;
for (i = firstplace; i < len + firstplace; i++)
{
TIMEPORT = 0x00; //清空数据,防止重影
seg_select = 1;
seg_select = 0;
TIMEPORT = 0xff; //清空数据,防止重影
bit_select = 1;
bit_select = 0;
TIMEPORT = clock_num[i]; //取出显示值
seg_select = 1;
seg_select = 0;
TIMEPORT = bitdata[i]; //取出位码
bit_select = 1;
bit_select = 0;
delay_ms(2);
}
}
delay.h
void delay_us(unsigned char t)
{
while (--t);
}
void delay_ms(unsigned char t)
{
while (t--)
{
delay_us(245);
delay_us(245);
}
}
void delay_s(unsigned char t)
{
while (t--)
{
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
}
}