📄 lcd._c
字号:
//ICC-AVR application builder : 2007-5-23 20:55:56
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
#include "all.h"
#include "pic.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
char *line1;
char *line2;
char *line3;
char *line4;
//延时程序
void delay(uint x)
{
uint j; uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<110;i++);
}
}
/**********************************************/
/*液晶发送子程序(串口)
输入数据:要发送的8位数据
输出:无
作者:李怀前
修改时间:2006-05-26
/*********************************************/
void lcm_out(char a)
{
char i,d;
for(i=0;i<8;i++)
{
PORTB&=~BIT(PB1);//E=0
d=a&0x80;
if(d)
PORTB|=BIT(PB0); //R/W=1
else
PORTB&=~BIT(PB0);//R/W=0
a<<=1;
PORTB|=BIT(PB1); //E=1
}
}
/***********************************************/
/*液晶写控制字程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void wr_com(uchar a)
{
uchar s,i;
s=a&0xf0;
lcm_out(0xf8);
lcm_out(s);
s=a&0x0f;
s<<=4;
lcm_out(s);
for(i=0;i<250;i++)//延时
{
asm("nop");
}
}
/***********************************************/
/*液晶写数据字程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void wr_date(uchar a)
{
uchar s,i;
s=a&0xf0;
lcm_out(0xfa);
lcm_out(s);
s=a&0x0f;
s<<=4;
lcm_out(s);
for(i=0;i<250;i++)//延时
{
asm("nop");
}
}
/***********************************************/
/*液晶图形显示子程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void pic_display(void)
{
unsigned char *qq;
unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
unsigned int i=0;
qq=data_buffer;
for( d1=0; d1<2; d1++ )
{
LCD_Y=0x80;
for( d2=0; d2<32; d2++)
{
wr_com(0x34);
wr_com(LCD_Y);
wr_com(LCD_X);
wr_com(0X30);
for( d3=0; d3<16; d3++ )
{
wr_date(*qq++);
}
LCD_Y+=1;
}
LCD_X=0x88;
}
wr_com(0x36);
delay(80);
wr_com(0x30);
delay(80);
}
/***********************************************/
/*液晶画线子程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void draw_point(unsigned char X,unsigned char Y,char State)
{
unsigned char LCD_X=0,LCD_Y=0;
unsigned int X_Temp = 0;
unsigned int X_Position = 0;
unsigned int byte_adr;
X_Temp = X;
while (X_Temp>7)
{
X_Position++;
X_Temp = X_Temp-8;
}
if (X_Temp<=7)
{
LCD_X=X_Position;
LCD_Y=Y;
byte_adr=LCD_Y*16+LCD_X;
if(State==0)
{
data_buffer[byte_adr]&=data2[X_Temp];
}
else
{
FFT[byte_adr]|=data[X_Temp];
}
}
}
void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
unsigned int x,y;
unsigned int d_x,d_y; //d_x=x2-x1;d_y=y2-y1;
int err=0;
unsigned char temp=0;
if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
d_y=y2-y1;
if (d_y==0)
{
if(x1>x2)
{x=x1;x1=x2;x2=x;}
for ( x=x1;x<=x2;x++ ) draw_point(x,y,1);
}
else
{
if(x2>=x1){temp=1;d_x=x2-x1;}
else d_x=x1-x2;
x=x1;y=y1; draw_point(x,y,1);
if(temp&&(d_y<=d_x))
while(x!=x2)
{if(err<0){x=x+1;err=err+(y2-y);}
else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);
}
draw_point(x,y,1);
}
else if(temp&&(d_y>d_x))
while(y!=y2)
{d_x=x2-x;d_y=y2-y;
if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
else {y=y+1;err=err-d_x;}
draw_point(x,y,1);
}
else if(!temp&&(d_y<=d_x))
while(x!=x2)
{d_x=x-x2;d_y=y2-y;
if(err<0){x=x-1;err=err+d_y;}
else {x=x-1;y=y+1;err=err+d_y-d_x;}
draw_point(x,y,1);
}
else if(!temp &&(d_y>d_x))
while(y!=y2)
{d_x=x-x2;d_y=y2-y;
if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
else {y=y+1;err=err-d_x;}
draw_point(x,y,1);
}
}
}
/***********************************************/
/*液晶初始化程序
输入数据:无
输出:无
修改时间:2007-5-26
/**********************************************/
void lcm_init(void)
{
wr_com(0x30);
delay(80);
wr_com(0x30);
delay(80);
wr_com(0x0c);
delay(80);
wr_com(0x01);
delay(80);
wr_com(0x60);
delay(80);
clear_all();
}
void clear_all(void)
{
wr_com(0x01);//清屏
delay(80);
wr_com(0x34);//清屏
delay(80);
wr_com(0x30);//清屏
delay(80);
}
//*******************整行显示******************/
void display(void)
{
wr_com(0x80);
while(*line1!=0x00)
{
wr_date(*line1);
line1++;
}
wr_com(0x90);
while(*line2!=0x00)
{
wr_date(*line2);
line2++;
}
wr_com(0x88);
while(*line3!=0x00)
{
wr_date(*line3);
line3++;
}
wr_com(0x9d);
while(*line4>=0&&*line4<=60)
{
wr_date(*line4);
line4++;
}
}
/************************系统初始化start*****************/
void system_init(void)
{
line1="";
line2="";
line3="";
line4="";
lcm_init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -