#include <reg51.h>
#define duanxuan P0
#define weixuan P1
unsigned char weixuanbianma[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char duanxuanbianma[10] = {
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char diejia=0;
void delay (unsigned char a)
{
unsigned char i;
while(a--)
for(i=120;i>0;i--);
}
void main()
{
unsigned char h,min,s,t;
unsigned char number=0;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
while(1)
{
if(diejia==20)
{
diejia=0;
number++;
}
t=number;
s=t%60;
min=t/60;
h=min%60;
weixuan=weixuanbianma[0];
duanxuan=duanxuanbianma[h/10];
delay(1);
weixuan=weixuanbianma[1];
duanxuan=duanxuanbianma[h%10];
delay(1);
weixuan=weixuanbianma[2];
duanxuan=0x40;
delay(1);
weixuan=weixuanbianma[3];
duanxuan=duanxuanbianma[min/10];
delay(1);
weixuan=weixuanbianma[4];
duanxuan=duanxuanbianma[min%10];
delay(1);
weixuan=weixuanbianma[5];
duanxuan=0x40;
delay(1);
weixuan=weixuanbianma[6];
duanxuan=duanxuanbianma[s/10];
delay(1);
weixuan=weixuanbianma[7];
duanxuan=duanxuanbianma[s%10];
delay(1);
}
}
dingshi () interrupt 1
{
TH0=15535/255;
TL0=15535%255;
diejia++;
}
运行8个数码管全都是亮的,求解
我想让他实现在数码管上计时的功能啊,时间没有问题
本回答被提问者采纳51单片机的定时器问题
1、关闭定时器是TR0=0;执行TR0=0;之后,定时器就停止计数,也就是TH0和TL0会保持当前值不会变,ET0=0是关闭定时器的中断,执行ET0=0后,即使定时器还在计数,计数发生溢出的时候不会进入中断。2、在我们使用定时器模式1进行定时,TH0和TL0有三种情况会发生变化:a、直接对TH0和TL0进行写入数值...
51单片机的定时器问题
假设要求50ms中断,求定时器初值。晶振11.0592M,每个机器周期时间为:t=12×(1\/11.0592M) 单位:us 50ms所需机器周期为:50×1000÷t=46080 那么需要初值为:0xFFFF-46080=65535-46080=19456=0x4C00 因此,置初值为TH=0x4c,TL=0x00,经过46080个指令周期,计数器将产生50ms定时中断。如果...
51单片机的定时器的时间怎么算??
51单片机1个机器周期=12个时钟周期,频率为12MHZ,则一个机器周期为1US,具体到定时器程序就是,假如你想定1MS,那么单片机每次加一个一,就要过1US,那么1MS就要加1000次,所以用65535-1000=64535;再把64535换成16进制为FC17,把FC付给TH0,17给TLO,即可定时1MS,因为65535他就溢出进入中断。
关于51单片机定时器问题
第一 ,变量 定义 uchar temp;a;b; 中间的 2个 冒号 应该是 逗号(uchar tmep,a,b;),使用 分号的俺还真没 试过;第二,定时器的 2处 初始化值 均错误,TL1=(65536-50000)%256,是 % 运算,不是 \/ 运行,TH1 是正确的。第三,按12MHz 晶振计算,定时器为 50ms 中断,程序 ...
为什么51单片机的定时器计时不准确
中断函数里面尽量少放语句,如果产生脉冲波形就只放一个 实在要放语句的话,可以增大计数的TH0和TL0,频率低一点输出的波形会更接近你想设置的值 比如 改成:
如何让51单片机定时10ms
51单片机的定时器T0要工作在方式1,才能定时10ms。而TMOD=0x02,是方式2,定时最长只有256us,是不行的,应该是TMOD=0x01,才对。采用中断方式,对10ms定时中断计数50次为500ms,交替从P1.1输出高电平和低电平,即输出周期 为1S的方波信号了。如下的仿真图,示波器测试为1S的方法信号。
请教51单片机前辈们一个关于定时器的问题,中断程序响应以后定时器不是...
中断响应后,定时器的值不会清零的,只有中断标志会自动清零。定时器的清零发生在定时器溢出,这时候产生中断请求(如果中断允许),从定时器溢出到MCU调用中断程序,需要一定的时间,自这期间,定时器继续运行,因此TL0的值不为0,需要在中断程序里手动清零。
51单片机如何配置定时器2?
51单片机配置定时器2的方法如下:要配置51单片机的定时器2,首先需要了解其定时器的基本结构和功能。51单片机通常具有两个定时器\/计数器,即定时器0和定时器1,而没有明确标记为“定时器2”的组件。然而,有些51单片机的变种或扩展版本可能包含额外的定时器或计数器,这些可能被称为定时器2。
51单片机程序如下,问定时器为啥没工作,求改错。
判断if(TF0==1)是否满足,这里不满足(因为TF0=0),所以 IF里面所有的东西都没有执行(包括定时器的重装),所以定时器只计数了一次,然后程序结束。你这里不能吧定时器0的重装数据放在主函数里面,这个过程要放在中断函数里面取处理,因此用定时器时,要开启定时器0中断。程序应该这么 写:
51单片机用定时器形成占空比问题
100Hz,周期=10mS,那么定时器周期取 T=1mS,输出信号周期\/定时器周期=10,那么 如果使P1.0口输出5个T0高电平,5个T低电平,则得到占空比=50%,周期=10T=10mS的方波信号;使P1.0口输出3个T0高电平,7个T低电平,则得到占空比=30%,周期=3T+7T=10T=10mS的方波信号;如果想得到占空比=33...