用了比較簡單的方法實現上位機控制點陣,程序是活的 根據你發送不同的漢字去改變·希望朋友指出缺點加以更改·大家也給點建議
首先安裝虛擬串口添加COM3和COM4(也就相當于把電腦的兩個COM口相連)在PROTEUS中的選擇COM3上位機選擇COM4就可以實現虛擬串口了
上位機軟件說明,在輸入曠中打上相關漢字然后點擊條形點陣然后點擊串口發送選擇COM口——寫入新數據·就OK 了
不懂的加QQ176709330本人喜歡交好友手把手你實現本功能
QQ截圖20130626035710.jpg (22.06 KB, 下載次數: 276)
下載附件
2013-6-26 04:21 上傳
120217ev8gqataq8xg7q7n.jpg.thumb.jpg (57.71 KB, 下載次數: 266)
下載附件
2013-6-26 04:24 上傳
源代碼仿真文件下載地址:
點陣廣告牌完美版1.0.zip
(81.86 KB, 下載次數: 599)
2013-6-26 04:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是源代碼預覽:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit H1 = P1^0;
sbit H2 = P1^1;
sbit LATCH_L = P1^2;
sbit OUT_L = P1^3;
sbit DS_H = P1^4;
sbit DS_L = P1^5;
void display();
void rxd_data();
void in_data();
void RXD_232();
void INIT();
uchar xdata TABLE[1500];
uchar BUFF[6];
uint ROW=0xfffe;
bit ks_bit;
uint second;
uchar s;
uint temp,time,nib;
uchar num,left,cc;
uint count;
bit xz_bit;
uint num_int,num1_int;
void delay(uint z)
{
while(z--);
}
void main()
{
uchar clean;
INIT();
while(1)
{
if(xz_bit)
if(second++>=1000)
{
ks_bit=1;second=0;xz_bit=0;num_int=0;num1_int=0;
for(clean=0;clean<64;clean++)
{
TABLE[(count-5)+clean+49]=0x00;
}
}
if(ks_bit)
display();
}
}
void INIT()
{
TMOD=0x21;
TH0=0xfc;
TL0=0x18;
TH1=0xfd;
TL1=0xfd;
EA=1;
TR0=1;
ET0=1;
TR1=1;
SM0=0;
SM1=1;
REN=1;
ES=1;
}
void RXD_232()
{
if(RI)
{
second=0;
if(ks_bit)
{
nib=0;
s=0;num=0;
cc=0;
ROW=0xfffe;
left=0;
P0=255;
H2=H1=1;
H2=H1=0;
count=0;
}
ks_bit=0;
if(count++>=5)
{
if(((count-5)*2)>=num_int&&((count-5)*2)<num_int+32)
TABLE[((count-5)*2+64)-(num1_int)]=SBUF;
if((count-5)*2>=32+num_int&&(count-5)*2<64+num_int)
TABLE[(((count-5)*2)+1+64)-(num1_int+32)]=SBUF;
if(((count-5)*2)%64==0)
{
num1_int=num1_int+32;
num_int=num_int+64;
}
}
RI=0;
xz_bit=1;
}
}
void display()
{
P0=255;
H2=H1=1;
H2=H1=0;
in_data();
rxd_data();
OUT_L=0;
OUT_L=1;
P0=ROW/256;
H2=1;
H2=0;
P0=ROW%256;
H1=1;
H1=0;
num++;
if(num==16)num=0;
ROW=_irol_(ROW,1);
delay(150);
}
void rxd_data()
{ uchar l,i,temp;
if(time>=50)
{
time=0;
left++;
if(left>=8)
{left=0;
cc++;
if(cc>=2){cc=0;nib=nib+32;
if(nib>=count+32)nib=0;
}
}
}
for(l=0+cc;l<4+cc;l++)
{
temp=BUFF[l]<<left|BUFF[l+1]>>8-left;
for(i=0;i<8;i++)
{
temp<<=1;
DS_L=CY;
LATCH_L=0;
LATCH_L=1;
}
}
}
void in_data()
{
for(s=0;s<=2;s++)
{
BUFF[2*s+1]=TABLE[nib+s*32+1+2*num];
BUFF[2*s]=TABLE[nib+s*32+2*num];
}
}
void tim0() interrupt 1
{
TH0=0xfc;
TL0=0x18;
time++;
}
void tim1() interrupt 4
{
RXD_232();
} |