打印
[51单片机]

8255a扩展AT89c52 40个IO口 接LED,依次亮灭(跑马灯)

[复制链接]
1922|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我写的程序如下边,用proteus仿真正确,可烧到AT89c52里,在作出的板子上运行就是错误的,感觉代码可能有问题,请各位帮我看看有问题吗,(还有我的PROTEUS电路图怎么弄上去啊,图片不能用,点不开)
#include<reg52.h>      //头文件
#include<intrins.h>
#include<absacc.h>
#define uint unsigned int     //宏定义
#define uchar unsigned char

#define COM82551 XBYTE[0xffBf]    //命令口地址
#define COM82552 XBYTE[0xff7f]    //命令口地址
#define U3PA XBYTE[0xffBc]       //U3A口地址
#define U3PB XBYTE[0xffBd]       //U3B口地址
#define U3PC XBYTE[0xffBe]       //U3C口地址
#define U4PA XBYTE[0xff73]       //U4A口地址
#define U4PB XBYTE[0xff77]       //U4B口地址

uchar temp,num;
void delay(uint z);    //声明子函数


void main()            //主函数
{  
        while(1)           //大循环
        {       
                num=0;
        COM82551=0x80;
        COM82552=0x80;           //模式选择命令字        :全部输出
/*******分隔符 ^_^ *************/
                temp=0x01;
        U3PA=temp;       //点亮U3A口第一个发光二极管
                for(num=0;num<7;num++) //延时、移位循环,以下更改地址信息,重复
                {
                        delay(50);
                        temp=_crol_(temp,1);   //以为指令
            U3PA=temp;  
                }
                delay(50);
                U3PA=0x00;
/*******分隔符 ^_^ *************/

                temp=0x01;
                U3PB=temp;      //U3B口第一灯亮
                for(num=0;num<7;num++)
                {
                        delay(50);
                        temp=_crol_(temp,1);                        
            U3PB=temp;
                }               
                delay(50);
                U3PB=0x00;
/*******分隔符 ^_^ *************/

                temp=0x01;      
            U3PC=temp;      //U3C口第一灯亮
                for(num=0;num<7;num++)
                {
                        delay(50);
                        temp=_crol_(temp,1);                
            U3PC=temp;
                }               
                delay(50);
                U3PC=0x00;
/*******分隔符 ^_^ *************/
        temp=0x01;
                U4PA=  temp;      //U4A口第一灯亮
                for(num=0;num<7;num++)
                {
                        delay(50);
                        temp=_crol_(temp,1);                
            U4PA=temp;
                }               
                delay(50);
                U4PA=0x00;
/*******分隔符 ^_^ *************/
       temp=0x01;
                U4PB=  temp;      //U4B口第一灯亮
                for(num=0;num<7;num++)
                {
                        delay(50);
                        temp=_crol_(temp,1);                        
            U4PB=temp;
                }               
                delay(50);
                U4PB=0x00;
        }

}
      
void delay(uint z)   //延时子函数   z=1000时,延时约为一秒
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

相关帖子

沙发
woyaodeshiyezi|  楼主 | 2014-3-11 14:46 | 只看该作者
补上原理图

QQ截图20140311144435.png (52.01 KB )

QQ截图20140311144435.png

使用特权

评论回复
板凳
coody| | 2014-3-11 18:01 | 只看该作者
还用8255A么?90年代用过多。。。
驱动LED我都用HC595

使用特权

评论回复
地板
lirunze| | 2014-3-11 18:35 | 只看该作者
恩,90的东西

使用特权

评论回复
5
ningling_21| | 2014-3-11 20:09 | 只看该作者
本帖最后由 ningling_21 于 2014-3-11 20:30 编辑


这原理图有没有问题呢?

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝