打印
[51单片机]

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

[复制链接]
1341|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

使用特权

评论回复
5
ayb_ice| | 2014-5-23 14:10 | 只看该作者
本帖最后由 ayb_ice 于 2014-5-23 14:15 编辑

感觉速度控制原理不对

没有原理图不好分析

你这成了每位LED显示时间可变

使用特权

评论回复
6
ayb_ice| | 2014-5-23 14:17 | 只看该作者
你需要做一个独立的动态显示程序,显示程序从BUFFER中取数据显示,
然后才是按速度要求来改变要显示的数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝