标题:
单片机T0方式2实现简单时钟仿真,keil+protues实现
[打印本页]
作者:
180303
时间:
2019-3-23 11:34
标题:
单片机T0方式2实现简单时钟仿真,keil+protues实现
T0方式2实现简单电子时钟仿真试验,keil+protues实现
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
捕获.JPG
(198.33 KB, 下载次数: 54)
下载附件
2019-3-23 11:34 上传
0.png
(11.21 KB, 下载次数: 20)
下载附件
2019-3-24 03:58 上传
单片机源程序如下:
//按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;
}
}
}
}
复制代码
所有资料51hei提供下载:
简单时钟显示实验.rar
(51.09 KB, 下载次数: 40)
2019-3-23 11:31 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
282323559
时间:
2020-4-25 21:56
很不错的程序和原理图。
作者:
wakfaf
时间:
2020-12-7 20:14
很不错的原理图
作者:
wakfaf
时间:
2020-12-7 20:15
这个想法和创意不错
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1