历史上的今天
今天是:2024年08月28日(星期三)
2020年08月28日 | 单片机T0方式2实现简单时钟
2020-08-28 来源:51hei

单片机源程序如下:
//按4X4键盘的F键 进入设定状态
//E D 键是前后移动键
//C按键是调整数值按键
#include "reg52.h"
#define uchar unsigned char
sbit key_h=P1^0;
sbit key_m=P1^1;
sbit key_s=P1^2;
unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表
unsigned int h,m,s,counter;
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<125;j++) //1ms基准延时程序
{
;
}
}
}
void Display_h(unsigned char x)
{
P2=0xfb; //P2.6引脚输出低电平,DS6点亮
P0=Tab[x/10]; //显示十位
delay1ms(5);
P2=0xff;
P2=0xf7; //P2.7引脚输出低电平,DS7点亮
P0=Tab[x%10]; //显示个位
delay1ms(5);
P2=0xff;
}
void Display_m(unsigned char x)
{
P2=0xef; //P2.6引脚输出低电平,DS6点亮
P0=Tab[x/10]; //显示十位
delay1ms(5);
P2=0xff;
P2=0xdf; //P2.7引脚输出低电平,DS7点亮
P0=Tab[x%10]; //显示个位
delay1ms(5);
P2=0xff;
}
void Display_s(unsigned char x)
{
P2=0xbf; //P2.6引脚输出低电平,DS6点亮
P0=Tab[x/10]; //显示十位
delay1ms(5);
P2=0xff;
P2=0x7f; //P2.7引脚输出低电平,DS7点亮
P0=Tab[x%10]; //显示个位
delay1ms(5);
P2=0xff;
}
/*********************初始化子程序**********************/
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
counter=0;
h=12;m=0;s=0;
}
/***************************按键调时间************************/
void TZ_h()
{
h++;
if(h>24)
{
h=0;
}
while(key_h!=1);
TR0=1;
}
void TZ_m()
{
m++;
if(m>60)
{
m=0;
}
while(key_m!=1);
TR0=1;
}
void TZ_s()
{
s++;
if(s>60)
{
s=0;
}
while(key_s!=1);
TR0=1;
}
/***************************主程序************************/
void main(void)
{
init();
while(1)
{
Display_h(h);
Display_m(m);
Display_s(s);
if(key_h==0)
delay1ms(20);
if(key_h==0)
{
TR0=0;
TZ_h();
}
if(key_m==0)
delay1ms(20);
if(key_m==0)
{
TR0=0;
TZ_m();
}
if(key_s==0)
delay1ms(20);
if(key_s==0)
{
TR0=0;
TZ_s();
}
}
}
/*************************定时器0的中断**********************/
void Time0() interrupt 1 using 2 //再次强调中断子程序执行时间越短越好
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
if(counter==20)
{
s++;
counter=0;
if(s==60)
{
m++;
s=0;
if(m==60)
{
h++;
m=0;
if(h==24)
h=0;
}
}
}
}
史海拾趣
|
和同事拜访客户,约的是下午2点,但1点45就到了,于是在大堂里逡巡一小会儿。 一个高高、瘦瘦的保安踱了过来,确认了我们不是搞破坏的。这时,同事不由抬了下靴子,跟我抱怨脚裸处太紧。这时保安很高兴地凑 ...… 查看全部问答> |
|
The first register setting for frame capture command can occur in any part of frame period. It is recommend to do first setting at the VSYNC “L” state. VSYNC information can be read from status SFR. Refer to the below Figure 2 ...… 查看全部问答> |
|
刚接触ST的片子,,,通用定时器TIM2、3、5,作普通定时时:外部晶振4M,在定时器初始化中,设置TIM3的分频值为8192,然后启动计数,发现从启动至第一次中断这段时间分频值是无效的,中断开始生效……查阅手册知:新的预分频值在下一个周期时 ...… 查看全部问答> |




