我原理圖都畫出來了,就是C語言沒學好,代碼不會寫,寫的程序一直用不了,求哪位大神無聊時幫我寫寫,原理圖,程序都打包上傳了,我的那個不成功,求大神啊,或者可以加我QQ交流交流:1204106723
這個是程序:(老是感覺不對)
#include <reg51.h>
#include <intrins.h>
#define DATAOUT P2 //P2 use as data, you can change
#define SPEED 13
void ymove(char dir,unsigned char *ptr,char speed);
void xmove(char dir,unsigned char *ptr,char n,char speed);
void delay(unsigned int a);
void display();
void displaytime(char time);
void init164();
sbit ADATA= DATAOUT^0;
sbit ASCK= DATAOUT^1;
sbit LATCH= DATAOUT^2;
sbit BDATA= DATAOUT^3;
sbit BCLK= DATAOUT^4;
code unsigned char hu[32]={
/*-- 文字: 湖 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x80,0x00,0x84,0x78,0x88,0x48,0xE8,0x4B,0x81,0x48,0x82,0x78,0x82,0x48,0xE8,0x4B,
0x28,0x4A,0x24,0x7A,0x27,0x4A,0xE4,0x4B,0x24,0x4A,0x04,0x44,0x04,0x54,0x00,0x22
}
code unsigned char nan[32]={
/*-- 文字: 南 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0xFE,0x3F,0x12,0x24,0x22,0x22,
0xF2,0x27,0x82,0x20,0x82,0x20,0xFA,0x2F,0x82,0x20,0x82,0x20,0x82,0x28,0x02,0x10
}
code unsigned char xin[32]={
/*-- 文字: 信 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x02,0x10,0x04,0xD0,0x7F,0x08,0x00,0x08,0x00,0x8C,0x3F,0x0C,0x00,0x0A,0x00,
0x89,0x3F,0x08,0x00,0x08,0x00,0x88,0x3F,0x88,0x20,0x88,0x20,0x88,0x3F,0x88,0x20
}
code unsigned char xi[32]={
/*-- 文字: 息 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x02,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x1F,0xF0,0x10,0x10,0x01,0x00,0x08,0x84,0x48,0x92,0x48,0x12,0x87,0xF0,0x00,0x00
}
code unsigned char zhi[32]={
/*-- 文字: 職 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFF,0x00,0x24,0xFC,0x24,0x84,0x3C,0x84,0x24,0x84,0x24,0x84,0x3C,0x84,
0x24,0xFC,0x24,0x84,0x2E,0x00,0xF4,0x48,0x44,0x44,0x04,0x84,0x04,0x82,0x05,0x02
}
code unsigned char ye[32]={
/*-- 文字: 業 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x44,0x44,0x24,0x44,0x24,0x48,0x14,0x48,
0x14,0x50,0x14,0x60,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0xFF,0xFE,0x00,0x00
}
code unsigned char ji[32]={
/*-- 文字: 技 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x20,0x10,0x20,0x10,0x20,0x13,0xFE,0xFC,0x20,0x10,0x20,0x10,0x20,0x15,0xFC,
0x18,0x84,0x30,0x88,0xD0,0x48,0x10,0x50,0x10,0x20,0x10,0x50,0x51,0x88,0x26,0x06
}
code unsigned char shu[32]={
/*-- 文字: 術 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x20,0x01,0x10,0x01,0x10,0x7F,0xFC,0x03,0x80,0x05,0x40,0x05,0x40,
0x09,0x20,0x11,0x10,0x21,0x08,0x41,0x04,0x81,0x02,0x01,0x00,0x01,0x00,0x01,0x00
}
code unsigned char xue[32]={
/*-- 文字: 學 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x80,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
}
code unsigned char yuan[32]={
/*-- 文字: 院 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x40,0x78,0x20,0x4B,0xFE,0x52,0x02,0x54,0x04,0x61,0xF8,0x50,0x00,0x48,0x00,
0x4B,0xFE,0x48,0x90,0x68,0x90,0x50,0x90,0x41,0x12,0x41,0x12,0x42,0x0E,0x44,0x00
}
code unsigned char xing[32]={
/*-- 文字: 信 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x08,0x40,0x08,0x20,0x0B,0xFE,0x10,0x00,0x10,0x00,0x31,0xFC,0x30,0x00,0x50,0x00,
0x91,0xFC,0x10,0x00,0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04
}
code unsigned char xii[32]={
/*-- 文字: 息 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x02,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x1F,0xF0,0x10,0x10,0x01,0x00,0x08,0x84,0x48,0x92,0x48,0x12,0x87,0xF0,0x00,0x00
}
code unsigned char gong[32]={
/*-- 文字: 工 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00
}
code unsigned char cheng[32]={
/*-- 文字: 程 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x08,0x00,0x1D,0xFC,0xF1,0x04,0x11,0x04,0x11,0x04,0xFD,0xFC,0x10,0x00,0x30,0x00,
0x39,0xFE,0x54,0x20,0x54,0x20,0x91,0xFC,0x10,0x20,0x10,0x20,0x13,0xFE,0x10,0x00
}
code unsigned char xix[32]={
/*-- 文字: 系 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00
}
code unsigned char aa[32]={
/*-- 文字:4 --*/
/*-- 寬度x高度=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x40,0x00,0xC0,0x01,0xC0,0x03,0xC0,0x06,0xC0,0x0C,0xC0,
0x18,0xC0,0x3F,0xF0,0x3F,0xF0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x00
}
code unsigned char bb[32]={
/*-- 文字:0 --*/
/*-- 寬度x高度=16x16 --*/
0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,
0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00
}
code unsigned char cc[32]={
/*-- 文字:3 --*/
/*-- 寬度x高度=16x16 --*/
0x00,0x00,0x00,0x00,0x07,0xF8,0x07,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x03,0xF8,
0x03,0xF8,0x00,0x18,0x00,0x18,0x00,0x18,0x07,0xF8,0x07,0xF8,0x00,0x00,0x00,0x00
}
code unsigned char xiang[32]={
/*-- 文字: 項 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x01,0xFE,0x00,0x20,0xFC,0x40,0x11,0xFC,0x11,0x04,0x11,0x24,0x11,0x24,
0x11,0x24,0x11,0x24,0x11,0x24,0x1D,0x44,0xE0,0x50,0x40,0x88,0x01,0x04,0x02,0x02
}
code unsigned char mu[32]={
/*-- 文字: 目 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,
0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08
}
code unsigned char xiao[32]={
/*-- 文字: 小 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x10,0x11,0x08,0x11,0x04,
0x21,0x04,0x21,0x02,0x41,0x02,0x81,0x02,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
}
code unsigned char zu[32]={
/*-- 文字: 組 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x00,0x11,0xF8,0x21,0x08,0x21,0x08,0x49,0x08,0xF9,0xF8,0x11,0x08,0x21,0x08,
0x41,0x08,0xF9,0xF8,0x41,0x08,0x01,0x08,0x19,0x08,0xE1,0x08,0x47,0xFE,0x00,0x00
}
unsigned char idata buffer[32];
void main(void)
{
unsigned char i;
init164();
while(1)
{
for(i=0;i<32;i++)
buffer=hu;
buffer=nan;
buffer=xin;
buffer=xi;
buffer=zhi;
buffer=ye;
buffer=ji;
buffer=shu;
buffer=xue;
buffer=yuan;
displaytime(1);
xmove(1,0,SPEED);
xmove(1,hu,3,SPEED);
xmove(1,nan,3,SPEED);
xmove(1,xin,3,SPEED);
xmove(1,xi,3,SPEED);
xmove(1,zhi,3,SPEED);
xmove(1,ye,3,SPEED);
xmove(1,ji,3,SPEED);
xmove(1,shu,3,SPEED);
xmove(1,xue,3,SPEED);
xmove(1,yuan,3,SPEED);
xmove(1,0,SPEED);
displaytime(1);
ymove(1,0,SPEED);
ymove(1,xing,3,SPEED);
ymove(1,xii,3,SPEED);
ymove(1,gong,3,SPEED);
ymove(1,cheng,3,SPEED);
ymove(1,xix,3,SPEED);
ymove(1,aa,3,SPEED);
ymove(1,bb,3,SPEED);
ymove(1,cc,3,SPEED);
ymove(1,xiang,3,SPEED);
ymove(1,mu,3,SPEED);
ymove(1,xiao,3,SPEED);
ymove(1,zu,3,SPEED);
ymove(0,0,SPEED);
displaytime(1);
xmove(1,hu,1,SPEED);
xmove(1,nan,1,SPEED);
xmove(1,xin,1,SPEED);
xmove(1,xi,1,SPEED);
xmove(1,zhi,1,SPEED);
xmove(1,ye,1,SPEED);
xmove(1,ji,1,SPEED);
xmove(1,shu,1,SPEED);
xmove(1,xue,1,SPEED);
xmove(1,yuan,1,SPEED);
}
}
/************* 子函數 ******************/
void delay(unsigned int a)
{
while(a--);
}
void display()
{
unsigned char hang,ib,k,tmp;
DATAOUT= 0x0;
BDATA = 0;
for(hang=0;hang<16;hang++)
{
ASCK =0;
LATCH=0;
BCLK =0;
for(ib=0;ib<2;ib++)
{
tmp = buffer[hang*2+ib];
for(k=0;k<8;k++)
{
tmp <<=1;
ASCK =0;
ADATA =CY;
ASCK =1;
}
}
DATAOUT|=0x14;
//LATCH=1;
//BCLK=1;
BDATA=1;
}
delay(64);
ASCK =0;
ASCK =1;
}
void displaytime(char time)
{
unsigned char i;
while(time--)
{
i=130;
while(i--)
display();
}
}
void init164()
{
char i;
BDATA=1;
for(i=0;i<16;i++)
{
BCLK =0;
BCLK =1;
}
}
void xmove(char dir,unsigned char *ptr,char n,char speed)
{ /* 方向 n是要移動的漢字個數 移動速度*/
unsigned char i=0, ib=0;
unsigned int tmp=0, speedm=0;
unsigned char buffer2[16]; //半個漢字的緩存
n*=20; //左半字和右半字,所以要x2
for(i=0;i<16;i++) //清零
buffer2=0;
if(dir == 1)
{
/**** 向左移動 ****/
for(n;n>0;n--)
{
if(ptr != 0)
{
tmp = n%2; //判斷是左半字還是右半字
for(i=0;i<16;i++)
buffer2=ptr[i*2+tmp];
if(tmp) //tmp為1時,將地址指向下一個漢字
ptr+=32;
}
for(tmp=8;tmp>0;tmp--) //要移動8列
{
ib=0;
for(i=0;i<16;i++)
{ //要移16行,共16個字節
buffer[ib] <<=1; //移第一個半字
if(buffer[ib+1] & 0x80)
buffer[ib]++;
ib++;
buffer[ib]<<=1; //移后半字
if(buffer2 & 0x80)
buffer[ib]++;
ib++;
buffer2<<=1; //緩沖左半字向左移一位
}
speedm=speed; //更新點陣
while(speedm--)
display();
}
}
}
//--------------------------------------------------//
else
{
/****** 向右移動 ******/
for(n;n>0;n--)
{
if(ptr != 0)
{
tmp = (n+1) % 2 ; //判斷左半字還是右半字
for(i=0;i<16;i++)
buffer2=ptr[i*2+tmp];
if(tmp == 0) //tmp為0時,將地址指向下一個漢字
ptr+=32;
}
for(tmp=8;tmp>0;tmp--) //要移動8列
{
ib=0;
for(i=0;i<16;i++)
{ //要移16行,共16個字節
buffer[ib+1] >>= 1; //移右半字
if(buffer[ib] & 0x01)
buffer[ib+1] |=0x80 ;
buffer[ib] >>= 1; //移左半字
if(buffer2 & 0x01)
buffer[ib] |= 0x80;
ib+=2;
buffer2 >>=1; //下個漢字的右半字向右移一位
}
speedm=speed;
while(speedm--) //更新點陣
display();
}
}
}
}
void ymove(char dir,unsigned char *ptr, char speed)
{ //dir=1上移動,dir=0為下移動
char i=0, j=0, ib=0;
unsigned int tmp=0, speedm=0;
if(dir==0)
{
/**** 向下移 ****/
ib=31;
for(i=16;i>0;i--) //下移16行
{
for(j=29;j>-1;j--)
buffer[j+2]=buffer[j]; //將上一行的內容復制到下一行
if(ptr==0)
{ //移空時,buffer的首行用0移入
buffer[0]=0;
buffer[1]=0;
}
else
{ //否則,處理buffer的首行元素
buffer[1]=ptr[ib];
buffer[0]=ptr[ib-1];
ib=ib-2;
}
speedm=speed;
while(speedm--) //更新點陣
display();
}
}
/****** 向上移 *******/
else
{
ib=0; //數組元素序號
for(i=0;i<16;i++) //上移16行
{
for(j=0;j<30;j++) //將下一行的內容復制到上一行
buffer[j]=buffer[j+2];
if(ptr==0) //移入為空,buffer的末行用0移入
{
buffer[30]=0;
buffer[31]=0;
}
else
{ //否則,處理buffer的末行元素
buffer[30]=ptr[ib];
buffer[31]=ptr[ib+1];
ib=ib+2;
}
speedm=speed; //更新點陣
while(speedm--)
display();
}
}
}
|