1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言花样霓虹灯程序 LM4229显示屏的单片机按键控制多种花样霓虹灯设计报告与源码...

C语言花样霓虹灯程序 LM4229显示屏的单片机按键控制多种花样霓虹灯设计报告与源码...

时间:2018-10-18 00:26:27

相关推荐

C语言花样霓虹灯程序 LM4229显示屏的单片机按键控制多种花样霓虹灯设计报告与源码...

//*****************************************************************************************

//文件名称:LM4229.c

//*****************************************************************************************

#include

//*****************************************************************************************

//*****************************************************************************************

//功能:延时函数

//*****************************************************************************************

void delay_lcd(uchar t)

{

for(;t!=0; t--);

}

//*****************************************************************************************

//功能:写数据函数

//*****************************************************************************************

void write_data(uchar dat)

{

CD=0;//数据

CE=0;//LCD使能

WRIT=0; //写

DATA_PORT=dat; //把数据送到P口

delay_lcd(1); //当晶振较高时加延时

WRIT=1; //关写

CE=1;//关使能

}

//*****************************************************************************************

//功能:写命令函数

//*****************************************************************************************

void write_com(uchar com)

{

CD=1;//命令

CE=0;

WRIT=0;

DATA_PORT=com;

delay_lcd(1);//当晶振较高时加延时

WRIT=1;

CE=1;

}

//*****************************************************************************************

//功能:LM4229初始化函数

//*****************************************************************************************

void lcd_init(void)

{

// FS1 = 0; //fs1管脚高电平时表示字体为8*6;低电平时为8*8

// MD2 = 0;

// HALT = 0;

write_data(0);

write_data(0); //图形首地址

write_com(0x42); //图形首地址设置

write_data(30);

write_data(0);

write_com(0x43); //图形区域设置

write_com(0x80); //设置为OR模式

write_com(0x9a); //关闭文本显示,开图形显示

}

//*****************************************************************************************

//功能:指定位置、长度清屏

//*****************************************************************************************

void clr_lcd(uchar x,uchar y,uint length)

{

uint i,place;

place=x*30+y;

write_data(place&0xff);

write_data(place/256);

write_com(0x24);//设置

for(i=0;i

write_data(0xff); //写入空格,清屏

write_com(0xb2); //关闭自动写

}

//*****************************************************************************************

//功能:指定位置向LCD写入指定字符

//*****************************************************************************************

void write_lcd(uchar x,uchar y,char *cha)

{

uint place,i=0;

uchar length,c1,c2,j,k;

for(length=0;cha[length]!=0;length++);

do

{

c1=cha[i]; //取字符串的ASCII码

c2=cha[i+1];

place=x*30+y;

if(c1<=128)//小于128为字符,大于128为汉字

{

for(k=0;k<16;++k) //字符设置为16*8

{

write_data(place&0xff); //写入地址高位

write_data(place/256); //写入地址低位

write_com(0x24);//地址设置

write_com(0xb0);//设置数据自动写

write_data(ASC_MSK[(c1-0x20)*16+k]); //例如:0的ASCII码为0x30,在ASC_MSK中的位置为0x10*16 ---16字节字码依次写入LCD

write_com(0xb2); //自动复位

place=place+30;

}

if(y>28)//y>28时候需要换行

{

x=x+16;

y=0;

}

else //否则,不换行,继续写下一个字符

{

y++;

}

i++;

}

else //c1大于128为汉字

{

for(j=0;j

{

if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])

{

break; //汉字找到则跳出

}

}

if(j

{

for(k=0;k<16;k++) //字符设置为16*8

{

write_data(place&0xff); //写入地址高位

write_data(place/256);//写入地址低位

write_com(0x24); //地址设置

write_com(0xb0); //设置数据自动写

write_data(GB_16[j].Msk[k*2]);

write_data(GB_16[j].Msk[k*2+1]); //16*16,每行2字节

write_com(0xb2); //自动复位

place=place+30; //下一行

}

}

else //没找到对应汉字则涂黑

{

for(k=0;k<16;k++) //字符设置为16*8

{

write_data(place&0xff); //写入地址高位

write_data(place/256);//写入地址低位

write_com(0x24); //地址设置

write_com(0xb0); //地址设置

write_data(0xff);

write_data(0xff);

write_com(0xb2); //自动复位

place=place+30; //下一行

}

}

if(y>27) //换行

{

x+=16;y=0;

}

else //不用换行,则下一个字

{

y+=2;

}

i+=2;

}

}

while(i

}

//--------------------------------------------

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。