📄 320240.c
字号:
lcddata = regnada;
lcdcs1_L; // chip enable.
lcden_H ; //
lcdrs_L ; // rs = 0;
lcdrw_L ; // rw = 0;
delay(3);
//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
//asm("nop");asm("nop");asm("nop");asm("nop");
lcdrw_H ; // rw = 1;
lcdrs_H ; // rs = 1;
lcdcs1_H; // chip disable.
}
/*****************************************************************************************/
void lcd_datawrite(uchar wrdata) //写资料到DDRAM
{
delay(30);
lcddata = wrdata;
lcdcs1_L; // chip enable.
lcden_H; //
lcdrs_H; // rs = 1;
lcdrw_L; // wr = 0;
delay(3);
//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
//asm("nop");asm("nop");asm("nop");asm("nop");
lcdrw_H; // wr = 1;
lcdrs_H; // rs = 1;
lcdcs1_H; // chip disable.
}
/*****************************************************************************************/
uchar lcd_regread(uchar regname) //读缓存器
{
uchar reg_rddata;
lcd_regwr(regname);
// DDRD = 0x00; //定义D口为输出
lcddata = 0xff;
lcdcs1_L; //PORTA&=~(1<<5); PORTA&=~(1<<5); // chip enable.
lcdrw_H; //PORTA|=(1<<3); PORTA|=(1<<3); // wr = 1;
lcdrs_L;//PORTA&=~(1<<2);PORTA&=~(1<<2); // rs = 0;
lcden_L;//PORTA&=~(1<<4); PORTA&=~(1<<4); // rd = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
reg_rddata = PORTC;
lcden_H;//PORTA|=(1<<4); PORTA|=(1<<4); // rd = 1;
lcdrs_H; //PORTA|=(1<<2); PORTA|=(1<<2); // rs = 1;
lcden_H; //PORTA|=(1<<5); PORTA|=(1<<5); // chip disable.
//DDRD = 0x00; //定义D口为输入
return(reg_rddata);
}
/******************************************************************************************
uchar ReadDataFromDDRAM(uchar addr_x,uchar addr_y)//读DDRAM
{
uchar i; //uchar RDDRAM;
gotoxy(addr_x,addr_y);
for(i=0;i<8;i++)
{ lcddata =i;//gotoxy(addr_x,addr_y);
lcdcs1_L; //cs1 =0;
lcdrw_H;//wr = 1;
lcdrs_H;//rs = 1;
lcden_L;//rd = 0;
asm("nop");
A[i] = lcddata;
lcden_H;//rd = 1;
lcdrs_H; //rs = 1;
lcdcs1_H;//lcd_cs1 =1;
return(i);
}
}
*/
/*****************************************************************************************/
extern void gotoxy(uchar x,uchar y) //指定液晶光标坐标
{
lcd_regwrite(0x60,x);
lcd_regwrite(0x70,y);
}
/*****************************************************************************************/
void lcd_reset(void) //液晶复位函数
{
delayms(120); // delay 120ms 等待上电复位
PORTF = 0xff;
}
/*****************************************************************************************/
void lcd_init (void) //液晶初始化函数
{ port_init();
lcd_regwrite(0x00,0xc9); // lcd控制寄存器: 正常文字模式
lcd_regwrite(0x01,0xf2); // 中断与忙碌寄存器: 8M的晶振高电平触发
lcd_regwrite(0x02,0x10); // ORM、RAM寄存器: 字体大小,水平一倍,垂直2倍
lcd_regwrite(0x03,0x80); // 光标显示寄存器: 光标平移动、不自动
lcd_regwrite(0x10,0x6b); // 光标指针寄存器: 自动移位。正常字体显示
lcd_regwrite(0x11,0x00); // 光标高度与宽度: 默认
lcd_regwrite(0x12,0x91); // 图形显示寄存器: 先水平后垂直
lcd_regwrite(0x21,0x27); // 窗口显示寄存器: 右边位置(320*240)=(320/8)-1=39=27H
lcd_regwrite(0x31,0xef); // 窗口显示寄存器: 底边位置(320*240)=240-1=239=EFH
lcd_regwrite(0x41,0x00); // 窗口显示寄存器: 左边位置
lcd_regwrite(0x51,0x00); // 窗口显示寄存器: 顶边位置
lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器: 右边 (320*240)=(320/8)-1=39=27H
lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器: 底边(320*240)=240-1=239=EFH
lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器: 左边
lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器: 顶边
lcd_regwrite(0x60,0x00); // 光标地址移位寄存器: CPXR=00H
lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)
lcd_regwrite(0x70,0x00); // 光标地址移位寄存器: CPYR=00H
lcd_regwrite(0x71,0x00); // 光标滚动其始地址: 00H
lcd_regwrite(0x72,0xef); // 光标滚动结束地址: EFH
lcd_regwrite(0x80,0xaa); // 光标闪烁时间设定:=Bit[7....0]*1/Frame_Rate
lcd_regwrite(0x81,0x00); // 保留:设定00H
lcd_regwrite(0x91,0x00); // 保留:设定00H
lcd_regwrite(0x90,0x06); // 屏幕周期更新设定:SCCR=(SCLK*DBW)/(Column*ROW*FRS)=(8MHz*4)/(320*240*70)
lcd_regwrite(0xa0,0x11); // 中断寄存器:
lcd_regwrite(0xa1,0x00); // key scan control register(kscr)
lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)
lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)
lcd_regwrite(0xb0,0x27); // 中断缓存器(intx)与CPXR相同发生中断
lcd_regwrite(0xb1,0xef); // 中断缓存器(inty)与CPYR相同发生中断
lcd_regwrite(0xc0,0x00); // 触摸功能寄存器(C0):
lcd_regwrite(0xc1,0x0a);
lcd_regwrite(0xc8,0x80);
lcd_regwrite(0xc9,0x80);
lcd_regwrite(0xca,0x00);
lcd_regwrite(0xd0,0x80);
lcd_regwrite(0xe0,0x00);
lcd_regwrite(0xf0,0xa0);
lcd_regwrite(0xf1,0x0f);
/*port_init();
lcd_regwrite(0x00,0xc9); // lcd控制寄存器: 正常文字模式
lcd_regwrite(0x01,0xf2); // 中断与忙碌寄存器: 8M的晶振高电平触发
lcd_regwrite(0x02,0x10); // ORM、RAM寄存器: 字体大小,水平一倍,垂直2倍
lcd_regwrite(0x03,0x80); // 光标显示寄存器: 光标平移动、不自动
lcd_regwrite(0x10,0x6b); // 光标指针寄存器: 自动移位。正常字体显示
lcd_regwrite(0x11,0x00); // 光标高度与宽度: 默认
lcd_regwrite(0x12,0x91); // 图形显示寄存器: 先水平后垂直
lcd_regwrite(0x21,0x27); // 窗口显示寄存器: 右边位置(320*240)=(320/8)-1=39=27H
lcd_regwrite(0x31,0xef); // 窗口显示寄存器: 底边位置(320*240)=240-1=239=EFH
lcd_regwrite(0x41,0x00); // 窗口显示寄存器: 左边位置
lcd_regwrite(0x51,0x00); // 窗口显示寄存器: 顶边位置
lcd_regwrite(0x21,0x27); // 窗口显示寄存器: 右边位置(320*240)=(320/8)-1=39=27H
lcd_regwrite(0x31,0xef); // 窗口显示寄存器: 底边位置(320*240)=240-1=239=EFH
lcd_regwrite(0x41,0x00); // 窗口显示寄存器: 左边位置
lcd_regwrite(0x51,0x00); // 窗口显示寄存器: 顶边位置
lcd_regwrite(0x21,0x27); // 窗口显示寄存器: 右边位置(320*240)=(320/8)-1=39=27H
lcd_regwrite(0x31,0xef); // 窗口显示寄存器: 底边位置(320*240)=240-1=239=EFH
lcd_regwrite(0x41,0x00); // 窗口显示寄存器: 左边位置
lcd_regwrite(0x51,0x00); // 窗口显示寄存器: 顶边位置
lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器: 右边 (320*240)=(320/8)-1=39=27H
lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器: 底边(320*240)=240-1=239=EFH
lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器: 左边
lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器: 顶边
lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器: 右边 (320*240)=(320/8)-1=39=27H
lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器: 底边(320*240)=240-1=239=EFH
lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器: 左边
lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器: 顶边
lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器: 右边 (320*240)=(320/8)-1=39=27H
lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器: 底边(320*240)=240-1=239=EFH
lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器: 左边
lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器: 顶边
lcd_regwrite(0x20,0x27); // 工作窗口显示寄存器: 右边 (320*240)=(320/8)-1=39=27H
lcd_regwrite(0x30,0xef); // 工作窗口显示寄存器: 底边(320*240)=240-1=239=EFH
lcd_regwrite(0x40,0x00); // 工作窗口显示寄存器: 左边
lcd_regwrite(0x50,0x00); // 工作窗口显示寄存器: 顶边
lcd_regwrite(0x60,0x00); // 光标地址移位寄存器: CPXR=00H
lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)
lcd_regwrite(0x70,0x00); // 光标地址移位寄存器: CPYR=00H
lcd_regwrite(0x71,0x00); // 光标滚动其始地址: 00H
lcd_regwrite(0x72,0xef); // 光标滚动结束地址: EFH
lcd_regwrite(0x80,0xaa); // 光标闪烁时间设定:=Bit[7....0]*1/Frame_Rate
lcd_regwrite(0x81,0x00); // 保留:设定00H
//lcd_regwrite(0x81,0x0c); // 保留:设定00H
lcd_regwrite(0x91,0x00); // 保留:设定00H
lcd_regwrite(0x90,0x06); // 屏幕周期更新设定:SCCR=(SCLK*DBW)/(Column*ROW*FRS)
// =(8MHz*4)/(320*240*70)
lcd_regwrite(0xa0,0x11); // 中断寄存器:
lcd_regwrite(0xa1,0x00); // key scan control register(kscr)
lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)
lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)
lcd_regwrite(0xb0,0x27); // 中断缓存器(intx)与CPXR相同发生中断
lcd_regwrite(0xb1,0xef); // 中断缓存器(inty)与CPYR相同发生中断
lcd_regwrite(0xc0,0x00); // 触摸功能寄存器(C0):
lcd_regwrite(0xc1,0x0a);
lcd_regwrite(0xc8,0x80);
lcd_regwrite(0xc9,0x80);
lcd_regwrite(0xca,0x00);
lcd_regwrite(0xd0,0x80);
lcd_regwrite(0xe0,0x00);
//lcd_regwrite(0xf0,0xa0);
lcd_regwrite(0xf0,0xa4);
lcd_regwrite(0xf1,0x0f);
/*30---基本指令动作
lcd_regwrite (0x00,0xE9);
lcd_regwrite (0x21,0x27);
lcd_regwrite (0x31,0xEF);
lcd_regwrite (0x01,0x2A);
lcd_regwrite (0x10,0x74);
lcd_regwrite (0x90,0x06);
lcd_regwrite (0x41,0x00);
lcd_regwrite (0x51,0x00);
lcd_regwrite (0x60,0x00);
lcd_regwrite (0x70,0x00);
lcd_regwrite (0xF0,0XA6);
lcd_regwrite (0x00,0xCD); /*30---基本指令动作*/
}
/*****************************************************************************************/
void lcd_clear(void) //清屏LCD
{
/*uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
reg_rddata = lcd_regread(0xf0);
reg_rddata |= 0x08;
lcd_regwrite(0xf0,reg_rddata);
*/
lcd_regwrite(0xE0,0x00);
//lcd_regwrite(0x00,);//clear LCD DDRAM
lcd_regwrite(0xF0,0xa8);
//gotoxy(0,0);
//lcd_regwrite(0xA8);
delay(300);
}
/*****************************************************************************************/
void lcd_photo(uchar const *pho) //全屏显示图形 绘图模式,正常显示,不反白
{
uchar i,j,k;
uchar const *pp;
// gotoxy(0,0);
//lcd_regwrite(0x12,0x11);
for(k=0;k<1;k++)//显示张数
{
pp=pho;
for(j=0;j<60;j++)
{
for(i=0;i<40;i++)
{
lcd_datawrite(*pp);
++pp;
}
}
}
}
void lcd_lattice(uchar data1,uchar data2)
{ //显示点阵
uchar i,j;
gotoxy(0,0);
for(j=0;j<60;j++)
{
for(i=0;i<80;i++)
{
lcd_datawrite(data1);
}
for(i=0;i<80;i++)
{
lcd_datawrite(data2);
}
}
}
/*****************************************************************************************/
void lcd_character(uchar const *cha, uint count) //显示汉字或字符
{
int i;
for(i=0;i<count;i++)
{
lcd_datawrite(*cha);
++cha;
}
}
/**************************************************
函数名称:PrintStr()
功 能:显示汉字或字符
入口参数:*ptr
出口参数:无
*****************************************************/
void PrintStr(uchar const *ptr,uint delay_time)
{
while(*ptr != '\0')
{
lcd_datawrite(*ptr);
++ptr;
delayms(delay_time);
}
}
void lcdhanzi(uchar x,uchar y,uchar const *ptr)
{
lcd_regwrite(0x00,0xCD);//
gotoxy(x,y);
while(*ptr != '\0')
{
lcd_datawrite(*ptr);
++ptr;
//delayms(delay_time);
}
}
/*******************************************************
* 名称: PutStr
* 功能: 显示单个字符函数
* 入口参数: x 坐标定位x
* y 坐标定位y
* CharByte 字符串指针*ptr
* 出口参数: 无
*******************************************************/
void PutStr(unsigned char x,unsigned char y,unsigned char *ptr)
{
lcd_regwrite(0x00,0xCD);//
gotoxy(x,y);
while(*ptr != '\0')
{
lcd_datawrite(*ptr);
++ptr;
}
}
void lcd_show(uchar x,uchar y,uint var)
{
uint i,j;
lcd_regwrite(0x00,0xCD);
gotoxy(x,y);
i=var%1000;
j=i%100;
lcd_datawrite(ASCIITable[var/1000]);
lcd_datawrite('.');
lcd_datawrite(ASCIITable[i/100]);
lcd_datawrite(ASCIITable[j/10]);
lcd_datawrite(ASCIITable[j%10]);
}
void lcd_show1(uchar x,uchar y,uint var)
{
uint i,j;
lcd_regwrite(0x00,0xCD);
gotoxy(x,y);
i=var%1000;
j=i%100;
lcd_datawrite(ASCIITable[var/1000]);
lcd_datawrite(ASCIITable[i/100]);
lcd_datawrite('.');
lcd_datawrite(ASCIITable[j/10]);
lcd_datawrite(ASCIITable[j%10]);
}
/**************************************************
函数名称:PutBCD()
功 能:显示汉字或字符
入口参数:*p
出口参数:无
*****************************************************/
void PutBCD(unsigned char x,unsigned char y,unsigned char var)
{
lcd_regwrite(0x00,0xCD);//
gotoxy(x,y); //坐标
lcd_datawrite(ASCIITable[var / 10]);
var = var%10;
lcd_datawrite(ASCIITable[var]);
}
/*******************************************************
* 名称: PutBCDONE
* 功能: 在某位置显示数字函数
* 入口参数: x 坐标定位x
* y 坐标定位y
* var 单个数字asc码
* 出口参数: 无
*******************************************************/
void PutBCDONE(unsigned char x,unsigned char y,unsigned char var)
{
lcd_regwrite(0x00,0xCD);//change to GB/ASCII mode
gotoxy(x,y);
lcd_datawrite(ASCIITable[var]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -