小弟初学C51单片机,想请教大哥大姐们一个使用定时器的跑马灯程序,程序如下,错在了哪?
答案:6 悬赏:80 手机版
解决时间 2021-03-25 18:36
- 提问者网友:浪荡绅士
- 2021-03-24 21:49
小弟初学C51单片机,想请教大哥大姐们一个使用定时器的跑马灯程序,程序如下,错在了哪?
最佳答案
- 五星知识达人网友:酒安江南
- 2021-03-24 22:44
你的程序有一个循环: while(0){} ,这是一个死循环,真正的死循环,程序根本进不去。
你试试这个,我现在没法给你调试,你自己试试。
#include
void main()
{
unsigned char cnt;
unsigned char con;
unsigned char num;
P0 = 0x00;
TMOD = 0x01;
TH0 = 0xB2;
TL0 = 0x63;
TR0 =1;
while(1)
{
con=0xfe;//LED左移初始状态
num=7;
while(1)
{
if(TF0 ==1)
{
TF0 = 0;
TH0 = 0xB2;
TL0 = 0x63;
cnt++;
if(cnt>=30)//计时器溢出30次移动一次
{
cnt=0;
P0 = con << 1;
num--;
if(num==0)//8个LED移动完毕,跳出循环开始右移
{
break;
}
}
}
}
con=0x7f;//LED右移初始状态
num=7;
while(1)
{
if(TF0 ==1)
{
TF0 = 0;
TH0 = 0xB2;
TL0 = 0x63;
cnt++;
if(cnt>=30)//计时器溢出30次移动一次
{
cnt=0;
P0 = con >> 1;
num--;
if(num==0)//8个LED移动完毕,跳出循环重新开始左移
{
break;
}
}
}
}
}
}
你试试这个,我现在没法给你调试,你自己试试。
#include
void main()
{
unsigned char cnt;
unsigned char con;
unsigned char num;
P0 = 0x00;
TMOD = 0x01;
TH0 = 0xB2;
TL0 = 0x63;
TR0 =1;
while(1)
{
con=0xfe;//LED左移初始状态
num=7;
while(1)
{
if(TF0 ==1)
{
TF0 = 0;
TH0 = 0xB2;
TL0 = 0x63;
cnt++;
if(cnt>=30)//计时器溢出30次移动一次
{
cnt=0;
P0 = con << 1;
num--;
if(num==0)//8个LED移动完毕,跳出循环开始右移
{
break;
}
}
}
}
con=0x7f;//LED右移初始状态
num=7;
while(1)
{
if(TF0 ==1)
{
TF0 = 0;
TH0 = 0xB2;
TL0 = 0x63;
cnt++;
if(cnt>=30)//计时器溢出30次移动一次
{
cnt=0;
P0 = con >> 1;
num--;
if(num==0)//8个LED移动完毕,跳出循环重新开始左移
{
break;
}
}
}
}
}
}
全部回答
- 1楼网友:纵马山川剑自提
- 2021-03-25 03:30
你根本就没打开定时器
- 2楼网友:三千妖杀
- 2021-03-25 01:52
跳不出循环啊追问恩,就是跳不出循环,一直在P0.0-P0.7之间,就是不执行下一条语句追答你的while有问题,改改
- 3楼网友:轮獄道
- 2021-03-25 00:54
跑马灯?
咋编写这么长的程序?
咋编写这么长的程序?
- 4楼网友:封刀令
- 2021-03-24 23:53
while(0)这个程序不对。要么你就用定时器中断来写。
- 5楼网友:逐風
- 2021-03-24 23:29
while(0) 里面的语句执行不了,你在哪里见过有人这样写
再理一下思路,那么多大括号不应该全在结尾处
再理一下思路,那么多大括号不应该全在结尾处
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯