找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3453|回复: 2
收起左侧

光立方与上位机通讯程序,不知道是硬件出错还是软件或者程序出错

[复制链接]
ID:66631 发表于 2014-11-7 20:25 | 显示全部楼层 |阅读模式
本帖最后由 miegui 于 2014-11-7 20:30 编辑

本人用的是stc12c5a60s2单片机,,P0口接锁存器是74hc573   p1口接uln2803      P2口为锁存器573的锁存端

#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uchar xx,yy,zz,layer,icnt,rxcnt;
uchar display[8][8];
void init()
{
        TMOD=0x22;//定时器1 方式2 用于产生波特率;定时器0 方式2 用于刷新显示
        TH1=0XFD;  //PROTEUS中晶振设置33.1776MHz(3倍于11.0592MHz)在波特率加倍的情况下初值0xFD对应波特率为57600
        TL1=0XFD;
        TH0=0xff;
        TL0=0xff;
        TR1=1;                //开定时器1
        TR0=1;

        SCON=0X50;//串口工作于方式1 可接收REN=1
        PCON|=0x80;//波特率加倍

        EA=1;                //开全局中断
        ES=1;                //开串口中断
        ET0=1;                //开定时器0中断
        PS=1;                //配置串口中断优先
}

void main()
{
        rxcnt=0;
        init();
        while(1);
}
void rxd() interrupt 4                  //串口中断服务程序
{                                                                  
                uchar temp=0;                        
                RI=0;
                ++rxcnt;
                if(rxcnt>=2)
                {                        
                        temp=SBUF;                        //读出接收到的数据
                        display[xx][yy]=temp;         //按顺序存入显示数组中
                        xx++;
                        if(xx>=8)                                
                        {
                                xx=0;
                                yy++;
                                if(yy>=8)
                                yy=0;
                        }
                }
                if(rxcnt>=65)
                rxcnt=0;        
}
/***********************************************
刷新显示的工作全部放到定时器0中断函数中来了
P0口是每个573芯片的输入端
P1口之前是ULN2803的输入端,经过修改删除了ULN2803
修改后P1直接作为八个面分别的公共端。
P2口是8个573芯片的锁存控制引脚。
*********************************************/
void timer0_isr(void) interrupt 1
{
                uchar i=0;
                for (i=0;i<7;i++)
                {
                        P2|=(0x01<<i);                //锁存端
                        P0=display[layer];//573输入端
                        P2&=~(0x01<<i);
                }               
                P1=~(0x01<<layer);                //面选择端(八个面分别的公共端)
                if(layer<7)
                        layer++;
                else
                        layer=0;
}


回复

使用道具 举报

ID:70840 发表于 2014-12-21 15:26 | 显示全部楼层
楼主是用电脑上位机串口控制光立方的吗????没有用吗
回复

使用道具 举报

ID:70840 发表于 2014-12-21 15:26 | 显示全部楼层
1925561743 发表于 2014-12-21 15:26
楼主是用电脑上位机串口控制光立方的吗????没有用吗

现在做的怎么样了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表