关于51单片机定时器问题
/利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,一秒钟内,使8个指示灯依次一个一个闪动,(8个灯依次亮一遍为一个周期,即1秒钟),此时,P2口接静态数码管...
/利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,一秒钟内,使8个指示灯依次一个一个闪动,(8个灯依次亮一遍为一个周期,即1秒钟),此时,P2口接静态数码管,1秒计一个数,计到F从0 再开始。下面是我写的程序,达不到要求,数码管计数特别快,LED8一直是亮的,不知道什么原因。(PS:我说清楚没?)希望大神指出错误,应该如何改正 谢谢了!
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
uchar temp;a ; b;
b=0;
uchar code table[ ]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
TMOD=0x01;
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
EA=1;ET1=1;TR1=1;
temp=0x01;//二极管高电平点亮
P1=temp;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
a++;
if (a==20)
{
a=0;
temp=_crol_(temp,1);
P1=temp;
P0=~table[b];//数码管是共阳极的
b++;
if (b>15)
b=0;
}
} 展开
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
uchar temp;a ; b;
b=0;
uchar code table[ ]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
TMOD=0x01;
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
EA=1;ET1=1;TR1=1;
temp=0x01;//二极管高电平点亮
P1=temp;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
a++;
if (a==20)
{
a=0;
temp=_crol_(temp,1);
P1=temp;
P0=~table[b];//数码管是共阳极的
b++;
if (b>15)
b=0;
}
} 展开
2个回答
展开全部
第一 ,变量 定义 uchar temp;a;b; 中间的 2个 冒号 应该是 逗号(uchar tmep,a,b;),使用 分号的俺还真没 试过;
第二,定时器的 2处 初始化值 均错误,TL1=(65536-50000)%256,是 % 运算,不是 / 运行,TH1 是正确的。
第三,按12MHz 晶振计算,定时器为 50ms 中断,程序 的内容 是 1s 数码管 更新一个数0-F,1s 流动 一个 LED灯,一个周期 是 8s 而不是 1s。想要 周期为 1s 的话,定时器的时间应该 是 125ms,一次性 都 定时不到,就只能是 定时 25ms,分5次,为一 颗灯 的时间,40次 为一个数码管 数值 的时间。
第二,定时器的 2处 初始化值 均错误,TL1=(65536-50000)%256,是 % 运算,不是 / 运行,TH1 是正确的。
第三,按12MHz 晶振计算,定时器为 50ms 中断,程序 的内容 是 1s 数码管 更新一个数0-F,1s 流动 一个 LED灯,一个周期 是 8s 而不是 1s。想要 周期为 1s 的话,定时器的时间应该 是 125ms,一次性 都 定时不到,就只能是 定时 25ms,分5次,为一 颗灯 的时间,40次 为一个数码管 数值 的时间。
更多追问追答
追问
前两条是我粗心了,谢谢指出来!
第三条是,我是想让8个灯亮一遍为1秒,可能我上面表达的不清楚,谢谢啦!
我刚刚改了,可是还是达不到我要的效果,发光管闪的更快,数码管也变快了,哪里出问题了呢
追答
LZ 修改了,是不是 该把修改 部分的 程序 贴出来啊??
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询