📄 av240128.c
字号:
/*---------
240128液晶参考程序
ATMEGA128
接口 PA0-PA7---->10-17
PC3-------->9
PC4-PC7---->5-8
液晶18接地
下面注释掉的函数是显示各种字体的函数.打开就能用.
-----------*/
#include <mega128.h>
#include <stdlib.h>
#include <stdio.h>
#include "av240128.h"
void wr_comm (uchar comm);
void wr_data (uchar dat);
void chk_busy (uchar autowr);
/*---------------延时子程序----------------*/
void delay (uint us)
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++)
;
}
/*------------写命令或数据到LCD--------------*/
void wr_od (uchar dat,uchar comm) //写一个数据和一个命令
{
wr_data(dat);
wr_comm(comm);
}
void wr_td (uchar datl,uchar dath,uchar comm) //写两个数据和一个命令
{
wr_data(datl);
wr_data(dath);
wr_comm(comm);
}
void wr_xd(uint dat,uchar comm) //写一个16进制数据和一个命令
{
uchar datl,dath;
datl=dat;
dath=dat>>8;
wr_data(datl);
wr_data(dath);
wr_comm(comm);
}
void wr_auto (uchar dat) //自动写数据
{
chk_busy (1);
ClrCD;
SetRE;
PORTA=dat;
ClrWR;
SetWR;
}
void wr_comm(uchar comm) //写命令
{
chk_busy (0);
SetCD;
SetRE;
PORTA=comm;
ClrWR;
SetWR;
}
void wr_data(uchar dat) //写数据
{
chk_busy (0);
ClrCD;
SetRE;
PORTA=dat;
ClrWR;
SetWR;
}
void chk_busy (uchar autowr) //测状态
{
uchar PPA;
PORTA=0xff;
DDRA=0X00;
SetCD;
SetWR;
ClrRE;
PPA=PINA;
if(autowr)
{
while(PPA&0X08==0X00)
;
}
else
{
while((PPA&0X01==0X00)|(PPA&0X02==0X00))
;
}
// PORTC|=BIT(5);
SetRE;
DDRA=0Xff;
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
DDRA|=0XFF; //A为输出
DDRB|=0XFF; //PB4-PB7为输出
DDRC|=0XFF; //PC5为输出
/* PORTC &= ~BIT(3);
PORTC|=BIT(3);
PORTC &= ~BIT(6);
PORTC|=BIT(4);
PORTC|=BIT(5);*/
PORTC.3=0;
PORTC.3=1;
ClrCE;
SetWR;
SetRE;
wr_xd(addr_w,0x40); //文本显示区首地址
wr_xd(addr_t,0x42); //图形显示区首地址
wr_td(width,0x00,0x41); //文本显示区宽度
wr_td(width,0x00,0x43); //图形显示区宽度
wr_comm(0x81); //逻辑"异或"
wr_td(0x02,0x00,0x22); //CGRAM偏置地址设置
wr_comm(0x9c); //启用文本显示,启用图形显示
}
/*--------------清RAM------------------*/
void clrram (void)
{
uchar i,j;
wr_xd(addr_w,0x24);
wr_comm(0xb0);
for(j=0;j<144;j++)
{
for(i=0;i<width;i++)
wr_auto(0x00);
}
wr_comm(0xb2);
}
/*--------------显示点阵------------------*/
void disp_dz(uchar data1,uchar data2)
{
uchar i,j;
wr_xd(addr_t,0x24);
wr_comm(0xb0);
for(j=0;j<32;j++)
{
for(i=0;i<width*2;i++)
wr_auto(data1);
for(i=0;i<width*2;i++)
wr_auto(data2);
}
wr_comm(0xb2);
}
/*--------------在addr处显示8xl*yl的图形--------------*/
void disp_img(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char flash *img)
{
uint i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_xd(addr+j*width+i,0x24);
wr_od(img[j*xl+i],0xc0);
}
}
}
/*----------在addr处显示row_yl行(每行row_xl个)8xl*yl的文字----------*/
void disp_hanzi(uint addr,uchar xl,uchar yl,uchar row_xl,uchar row_yl, unsigned char flash *chn)
{
uint i,j,k,m;
for(m=0;m<row_yl;m++)
{
for(k=0;k<row_xl;k++)
{
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_xd(addr+m*yl*width+k*xl+j*width+i,0x24);
wr_od(chn[(m*row_xl*xl*yl)+(k*xl*yl)+(j*xl)+i],0xc0);
}
}
}
}
}
/*--------------显示字符------------------*/
void disp_eng(unsigned char *eng)
{
uint i,j;
wr_xd(addr_w,0x24);
wr_comm(0xb0);
for(j=0;j<9;j++)
{
for(i=0;i<width;i++)
wr_auto(eng[j*width+i]);
}
wr_comm(0xb2);
}
/*void disp_1224(uint x,uint y,unsigned char ss)
{
unsigned int i,j,no,offset;
switch(ss)
{
case '+':no=0;
break;
case '-':no=1;
break;
case '.':no=2;
break;
case '0':no=3;
break;
case '1':no=4;
break;
case '2':no=5;
break;
case '3':no=6;
break;
case '4':no=7;
break;
case '5':no=8;
break;
case '6':no=9;
break;
case '7':no=10;
break;
case '8':no=11;
break;
case '9':no=12;
break;
default: return;
}
offset=0x1e0+x+y*30;
for(i=0;i<32;i++)
{
for(j=0;j<2;j++)
{
wr_xd(offset+j,0x24);
wr_od(shuzi3216[no][j+i*2],0xc0);
}
offset+=30;
}
return;
}
void disph_3216(uint x,uint y,unsigned char ss)
{
unsigned int i,j,no,offset;
switch(ss)
{
case '+':no=0;
break;
case '-':no=1;
break;
case '.':no=2;
break;
case '0':no=3;
break;
case '1':no=4;
break;
case '2':no=5;
break;
case '3':no=6;
break;
case '4':no=7;
break;
case '5':no=8;
break;
case '6':no=9;
break;
case '7':no=10;
break;
case '8':no=11;
break;
case '9':no=12;
break;
default: return;
}
offset=0x1e0+x+y*30;
for(i=0;i<16;i++)
{
for(j=0;j<4;j++)
{
wr_xd(offset+j,0x24);
wr_od(shuzis1632[no][j+i*4],0xc0);
}
offset+=30;
}
return;
}
void disph_4824(uint x,uint y,unsigned char ss)
{
unsigned int i,j,no,offset;
switch(ss)
{
case '+':no=0;
break;
case '-':no=1;
break;
case '.':no=2;
break;
case '0':no=3;
break;
case '1':no=4;
break;
case '2':no=5;
break;
case '3':no=6;
break;
case '4':no=7;
break;
case '5':no=8;
break;
case '6':no=9;
break;
case '7':no=10;
break;
case '8':no=11;
break;
case '9':no=12;
break;
default: return;
}
offset=0x1e0+x+y*30;
for(i=0;i<24;i++)
{
for(j=0;j<6;j++)
{
wr_xd(offset+j,0x24);
wr_od(shuzis2448[no][j+i*6],0xc0);
}
offset+=30;
}
return;
}
void disph_4024(uint x,uint y,unsigned char ss)
{
unsigned int i,j,no,offset;
switch(ss)
{
case '+':no=0;
break;
case '-':no=1;
break;
case '.':no=2;
break;
case '0':no=3;
break;
case '1':no=4;
break;
case '2':no=5;
break;
case '3':no=6;
break;
case '4':no=7;
break;
case '5':no=8;
break;
case '6':no=9;
break;
case '7':no=10;
break;
case '8':no=11;
break;
case '9':no=12;
break;
default: return;
}
offset=0x1e0+x+y*30;
for(i=0;i<24;i++)
{
for(j=0;j<5;j++)
{
wr_xd(offset+j,0x24);
wr_od(shuzis2440[no][j+i*5],0xc0);
}
offset+=30;
}
return;
} */
void disphz(uint x,uint y,unsigned char ss,unsigned char flag)
{
unsigned int i,j,no,offset;
unsigned char lsd;
offset=0x1e0+x+y*30;
for(i=0;i<16;i++)
{
for(j=0;j<2;j++)
{
wr_xd(offset+j,0x24);
if(flag==1)
lsd=~hz1616[ss][j+i*2];
else
lsd=hz1616[ss][j+i*2];
wr_od(lsd,0xc0);
}
offset+=30;
}
return;
}
void dispshuzi(uint x,uint y,unsigned char ss,unsigned char flag)
{
unsigned int i,j,no,offset;
unsigned char lsd;
offset=0x1e0+x+y*30;
for(i=0;i<16;i++)
{
for(j=0;j<2;j++)
{
wr_xd(offset+j,0x24);
if(flag==1)
lsd=~shuzi[ss][j+i*2];
else
lsd=shuzi[ss][j+i*2];
wr_od(lsd,0xc0);
}
offset+=30;
}
return;
}
/*------------------主程序--------------------*/
void dispfirst(void )
{
unsigned int i;
for(i=0;i<4;i++)
{
/* disp_1224(0,i*32,'+');
disp_1224(2,i*32,'-');
disp_1224(4,i*32,'.');
disp_1224(6,i*32,'1');
disp_1224(8,i*32,'2');
disp_1224(10,i*32,'3');
disp_1224(12,i*32,'4');
disp_1224(14,i*32,'5');
disp_1224(16,i*32,'6');
disp_1224(18,i*32,'7');
disp_1224(20,i*32,'8');
disp_1224(22,i*32,'9');
disp_1224(24,i*32,'0'); */
}
return;
}
void dispsecond(void)
{
unsigned int i;
for(i=0;i<4;i++)
{
/* disph_3216(i*8,112,'+');
disph_3216(i*8,96,'-');
disph_3216(i*8,80,'.');
disph_3216(i*8,64,'0');
disph_3216(i*8,48,'1');
disph_3216(i*8,32,'2');
disph_3216(i*8,16,'3');
disph_3216(i*8,0,'4');
if(i<3)
{
disph_3216(i*8+4,112,'5');
disph_3216(i*8+4,96,'6');
disph_3216(i*8+4,80,'7');
disph_3216(i*8+4,64,'8');
disph_3216(i*8+4,48,'9');
} */
}
}
void dispthird( void)
{
/* disph_4824(0,104,'+');
disph_4824(0,80,'-');
disph_4824(0,56,'.');
disph_4824(6,104,'0');
disph_4824(6,80,'1');
disph_4824(6,56,'2');
disph_4824(6,32,'3');
disph_4824(6,8,'4');
disph_4824(12,104,'5');
disph_4824(12,80,'6');
disph_4824(12,56,'7');
disph_4824(12,32,'8');
disph_4824(12,8,'9');
disph_4824(18,104,'0');
disph_4824(18,80,'1');
disph_4824(18,56,'2');
disph_4824(18,32,'3');
disph_4824(18,8,'4');
disph_4824(24,104,'5');
disph_4824(24,80,'6');
disph_4824(24,56,'7');
disph_4824(24,32,'8');
disph_4824(24,8,'9'); */
return;
}
void dispforth(void )
{
/* disph_4024(0,104,'+');
disph_4024(0,80,'-');
disph_4024(0,56,'.');
disph_4024(5,104,'0');
disph_4024(5,80,'1');
disph_4024(5,56,'2');
disph_4024(5,32,'3');
disph_4024(5,8,'4');
disph_4024(10,104,'5');
disph_4024(10,80,'6');
disph_4024(10,56,'7');
disph_4024(10,32,'8');
disph_4024(10,8,'9');
disph_4024(15,104,'+');
disph_4024(15,80,'-');
disph_4024(15,56,'.');
disph_4024(20,104,'0');
disph_4024(20,80,'1');
disph_4024(20,56,'2');
disph_4024(20,32,'3');
disph_4024(20,8,'4');
disph_4024(25,104,'5');
disph_4024(25,80,'6');
disph_4024(25,56,'7');
disph_4024(25,32,'8');
disph_4024(25,8,'9'); */
return;
}
void main ()
{
unsigned int i,j,k;
unsigned char sss[7]={28,29,4,30,5,31,32};
init_lcd();
/* wr_xd(0x1e0,0x24);
wr_od(0xff,0xc0);
wr_xd(0x1f0,0x24);
wr_od(0x0,0xc0);*/
j=1;
k=0;
clrram();
/*for(i=0;i<4;i++)
{
disp_1224(0,i*32,'+');
disp_1224(2,i*32,'-');
disp_1224(4,i*32,'.');
disp_1224(6,i*32,'1');
disp_1224(8,i*32,'2');
disp_1224(10,i*32,'3');
disp_1224(12,i*32,'4');
disp_1224(14,i*32,'5');
disp_1224(16,i*32,'6');
disp_1224(18,i*32,'7');
disp_1224(20,i*32,'8');
disp_1224(22,i*32,'9');
disp_1224(24,i*32,'0');
}*/
/* for(i=0;i<4;i++)
{
disph_3216(i*8,112,'+');
disph_3216(i*8,96,'-');
disph_3216(i*8,80,'.');
disph_3216(i*8,64,'0');
disph_3216(i*8,48,'1');
disph_3216(i*8,32,'2');
disph_3216(i*8,16,'3');
disph_3216(i*8,0,'4');
if(i<3)
{
disph_3216(i*8+4,112,'5');
disph_3216(i*8+4,96,'6');
disph_3216(i*8+4,80,'7');
disph_3216(i*8+4,64,'8');
disph_3216(i*8+4,48,'9');
}
}*/
/* disph_4824(0,104,'+');
disph_4824(0,80,'-');
disph_4824(0,56,'.');
disph_4824(6,104,'0');
disph_4824(6,80,'1');
disph_4824(6,56,'2');
disph_4824(6,32,'3');
disph_4824(6,8,'4');
disph_4824(12,104,'5');
disph_4824(12,80,'6');
disph_4824(12,56,'7');
disph_4824(12,32,'8');
disph_4824(12,8,'9');
disph_4824(18,104,'0');
disph_4824(18,80,'1');
disph_4824(18,56,'2');
disph_4824(18,32,'3');
disph_4824(18,8,'4');
disph_4824(24,104,'5');
disph_4824(24,80,'6');
disph_4824(24,56,'7');
disph_4824(24,32,'8');
disph_4824(24,8,'9');
*/
/*disph_4024(0,104,'+');
disph_4024(0,80,'-');
disph_4024(0,56,'.');
disph_4024(5,104,'0');
disph_4024(5,80,'1');
disph_4024(5,56,'2');
disph_4024(5,32,'3');
disph_4024(5,8,'4');
disph_4024(10,104,'5');
disph_4024(10,80,'6');
disph_4024(10,56,'7');
disph_4024(10,32,'8');
disph_4024(10,8,'9');
disph_4024(15,104,'+');
disph_4024(15,80,'-');
disph_4024(15,56,'.');
disph_4024(20,104,'0');
disph_4024(20,80,'1');
disph_4024(20,56,'2');
disph_4024(20,32,'3');
disph_4024(20,8,'4');
disph_4024(25,104,'5');
disph_4024(25,80,'6');
disph_4024(25,56,'7');
disph_4024(25,32,'8');
disph_4024(25,8,'9'); */
clrram();
for(i=0;i<12;i++)
disphz(i*2+3,0,i,0);
for(i=0;i<7;i++)
disphz(i*2+8,16,sss[i],0);
for(i=0;i<12;i++)
disphz(i*2+3,32,i,1);
for(i=0;i<7;i++)
disphz(i*2+8,48,sss[i],1);
for(i=0;i<12;i++)
dispshuzi(i*2+3,64,i,0);
while (1)
{
for(i=0;i<12;i++)
dispshuzi(i*2+3,96,i,0);
delay1(100);
for(i=0;i<12;i++)
dispshuzi(i*2+3,96,i,1);
delay1(100);
/* clrram();
dispsecond();
delay1(800);
delay1(800);
clrram();
dispthird();
delay1(800);
delay1(800);
clrram();
dispforth();
delay1(800);
delay1(800); */
// disp_hanzi(0x01e0,4,32,4,1,tabAVR1); //显示汉字 "欢迎光临"
/* for(i=0;i<30;i++)
{ wr_xd(0x1e0+i+k*30,0x24);
wr_od(0xff,0xc0);
}*/
/* for(i=0;i<j;i++)
{ wr_xd(0x1e0+1500+i,0x24);
wr_od(0x55,0xc0);
}
delay1(800);
clrram();
// disp_img(0x01e0,30,56,tabAVR2); //显示含有"我们的AVR"的图片
for(i=0;i<j;i++)
{ wr_xd(0x1e0+2100+i,0x24);
wr_od(0xaa,0xc0);
}*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -