[51单片机] 大神们小弟求助,看看这个程序为什么在板子上实现不了呢?

[复制链接]
1587|5
 楼主| 美好人生223 发表于 2014-5-22 18:27 | 显示全部楼层 |阅读模式
大神门们帮我看看,在AT89S51的开发板上为什么实现不了程序如下:#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit k4=P2^3;
bit ldelay;//长定时溢出标志,预置为0
uchar speed=10;//设置一个变量,保默认的跑马灯的移动速度
uchar t=0;
/ar code dx516[3]=_at_0x003b;//为了仿真设置的
void main()
{
        uchar code ledp[12]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff};
        uchar code ledp1[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef};
        uchar ledi;//指示显示顺序
   TMOD = 0x10; TH1 = 0x0FF;TL1 = 0x0EC;
        EA=1;
        ET1=1;
        TR1=1;
        while(1)
        {
                if(ldelay)//发现有时间溢出标志进入处理
                {
                        ldelay=0;//清楚标记
                        P0=ledp[ledi];
                        P2=ledp1[ledi];
                        ledi++;
                        if(ledi==12)
                        {
                                ledi=0;       
                        }
                }       

                if(!k1)speed=50;if(!k2)speed=25;if(!k3)speed=10;if(!k4)speed=5;
        }
}
time1() interrupt 3
{
        t++;
        if((t==speed)||(t>=50))//比较一个变量的数值 以实现变量的溢出 同时限制的最慢速度
        {
                t=0;
                ldelay=1;//每次长时间的溢出,就置一个标记 以便主程序处理
        }
                TH1 = 0x0FF;TL1 = 0x0EC;         
wangch_sh 发表于 2014-5-22 20:14 | 显示全部楼层
实现什么功能?
 楼主| 美好人生223 发表于 2014-5-23 12:52 | 显示全部楼层
wangch_sh 发表于 2014-5-22 20:14
实现什么功能?

实现四建控制四级跑马灯
ayb_ice 发表于 2014-5-23 14:07 | 显示全部楼层
程序没有什么大问题,只是中断频率太快了
65536 - 0xffec = 20
ayb_ice 发表于 2014-5-23 14:10 | 显示全部楼层
本帖最后由 ayb_ice 于 2014-5-23 14:15 编辑

感觉速度控制原理不对

没有原理图不好分析

你这成了每位LED显示时间可变
ayb_ice 发表于 2014-5-23 14:17 | 显示全部楼层
你需要做一个独立的动态显示程序,显示程序从BUFFER中取数据显示,
然后才是按速度要求来改变要显示的数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部