要求从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(); //绿 }
|