找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3701|回復(fù): 2
收起左側(cè)

光立方與上位機(jī)通訊程序,不知道是硬件出錯(cuò)還是軟件或者程序出錯(cuò)

[復(fù)制鏈接]
ID:66631 發(fā)表于 2014-11-7 20:25 | 顯示全部樓層 |閱讀模式
本帖最后由 miegui 于 2014-11-7 20:30 編輯

本人用的是stc12c5a60s2單片機(jī),,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;//定時(shí)器1 方式2 用于產(chǎn)生波特率;定時(shí)器0 方式2 用于刷新顯示
        TH1=0XFD;  //PROTEUS中晶振設(shè)置33.1776MHz(3倍于11.0592MHz)在波特率加倍的情況下初值0xFD對應(yīng)波特率為57600
        TL1=0XFD;
        TH0=0xff;
        TL0=0xff;
        TR1=1;                //開定時(shí)器1
        TR0=1;

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

        EA=1;                //開全局中斷
        ES=1;                //開串口中斷
        ET0=1;                //開定時(shí)器0中斷
        PS=1;                //配置串口中斷優(yōu)先
}

void main()
{
        rxcnt=0;
        init();
        while(1);
}
void rxd() interrupt 4                  //串口中斷服務(wù)程序
{                                                                  
                uchar temp=0;                        
                RI=0;
                ++rxcnt;
                if(rxcnt>=2)
                {                        
                        temp=SBUF;                        //讀出接收到的數(shù)據(jù)
                        display[xx][yy]=temp;         //按順序存入顯示數(shù)組中
                        xx++;
                        if(xx>=8)                                
                        {
                                xx=0;
                                yy++;
                                if(yy>=8)
                                yy=0;
                        }
                }
                if(rxcnt>=65)
                rxcnt=0;        
}
/***********************************************
刷新顯示的工作全部放到定時(shí)器0中斷函數(shù)中來了
P0口是每個(gè)573芯片的輸入端
P1口之前是ULN2803的輸入端,經(jīng)過修改刪除了ULN2803
修改后P1直接作為八個(gè)面分別的公共端。
P2口是8個(gè)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);                //面選擇端(八個(gè)面分別的公共端)
                if(layer<7)
                        layer++;
                else
                        layer=0;
}


回復(fù)

使用道具 舉報(bào)

ID:70840 發(fā)表于 2014-12-21 15:26 | 顯示全部樓層
樓主是用電腦上位機(jī)串口控制光立方的嗎????沒有用嗎
回復(fù)

使用道具 舉報(bào)

ID:70840 發(fā)表于 2014-12-21 15:26 | 顯示全部樓層
1925561743 發(fā)表于 2014-12-21 15:26
樓主是用電腦上位機(jī)串口控制光立方的嗎????沒有用嗎

現(xiàn)在做的怎么樣了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表