打印

俺的程序出了问题请教大峡

[复制链接]
1642|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyeu|  楼主 | 2007-10-8 12:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求从PC用COM口下一个32位数据的字模到52缓存,然后用16X16LED点点阵显示!
目前程序还有问题下数据后 偶尔显示正确!
还请各路高手指教一下!
/////////////////////////////////////////////////////////////////////
/******************************************************************

led.C  file
Created by fengyeu
Date: 2007.10.5
Edit date:2007.10.6
            
*******************************************************************/

#include "reg52.h"

sbit G=P1^4;                    //P1.7为显示颜色控制信号端口
sbit R=P1^5;                    //P1.6为显示颜色控制信号端口
unsigned char radd=0x00;        //接收计数
unsigned char data_buf[32];
long int   i = 0x01;

//------------延时函数--------//
void delay(unsigned int dt)
{
  register unsigned char bt;
  for(;dt>1;dt--)
  for(bt=0;bt<255;bt++);
}
//---------颜色控制------------//
color2()
{
G=0;        //绿
R=1;
}
//------------串口中断部分-------//
void Init_Com(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;    //;串口为方式1    8 UART
     TH1 = 0xfd;
     TL1 = 0xfd;
     TR1 = 1;       //;波特率9600
     REN = 1;
     ES = 1;
     EA = 1;
}
void ComInt() interrupt 4
{
    unsigned char dat;
    ES = 0;
    RI = 0;
    dat = SBUF;
    radd++;
    data_buf = dat;
    i++;
    
    SBUF = dat;
    do{}while( TI == 0 );
    TI = 0;
    ES = 1;
    
}
//------------------------
void Com_start(void)
{
  
  Init_Com();
  if(radd>=32)
  {
   radd=0x00;
   while(1)
  {
//----------------------------
   int    k=0xf0;
   char dd=1;
//------------------------------
    for(k=0xf0;dd<32;) //单字扫描;
       {
        P1=0xff;
        color2();
         P1=(P1&k);
        P0 = data_buf[dd];        //写上半屏
        dd++;                    //取表偏移变量       
        P2 = data_buf[dd];
        dd++;                    //取表偏移变量
        k++;
        if(k>0xff)
        {
         k=0xf0;
        }                    //取字偏移量  上16列 + 下16列 (32)
        delay(2);            //此延时为显示一个字后 加亮LED
        P0=0x00;            //去鬼影/去重影
        P2=0x00;            //去鬼影/去重影
       }      
  }
  }
}
//---------主函数  ---------//
void main(void)

  P3=0xff;    //io初始化
  P1=0xff;
  P0=0x00;
  P2=0x00;
  Com_start();    //开串口
  color2();       //绿      
}

相关帖子

沙发
fengyeu|  楼主 | 2007-10-8 12:54 | 只看该作者

原理图如下

使用特权

评论回复
板凳
fengyeu|  楼主 | 2007-10-8 12:57 | 只看该作者

程序注释有些忘了改

P1.0--P1.3列扫描
P1.5  P1.6颜色控制

使用特权

评论回复
地板
fengyeu|  楼主 | 2007-10-8 13:11 | 只看该作者

加了个,缓存清除 效果好了些

for(yy=0;yy>=32;yy++)
       {
        data_buf[yy] = 0x00;

       }      

使用特权

评论回复
5
guoqi| | 2007-10-8 15:21 | 只看该作者

hehe

for(yy=0;yy>=32;yy++)
       {
        data_buf[yy] = 0x00;

       }     

这个FOR根本就不会执行!

使用特权

评论回复
6
ayb_ice| | 2007-10-8 15:23 | 只看该作者

楼上细心

使用特权

评论回复
7
zgl7903| | 2007-10-8 15:46 | 只看该作者

多字节传送的帧同步呢?

使用特权

评论回复
8
fengyeu|  楼主 | 2007-10-8 16:12 | 只看该作者

终于OK了

变量没有定义好 啊!

long int   i = 0x01;XXXXXXXXXXXXXXXXXXXXXXX
另外不光这个问题
哪个FOR是多余的
改了一下午终于OK了
庆祝下,
谢谢各楼的回答。

使用特权

评论回复
9
cheungman| | 2007-10-8 16:29 | 只看该作者

re

LZ的原理图是用什么画的?

使用特权

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

本版积分规则

53

主题

446

帖子

0

粉丝