📄 lcd_128.c
字号:
主程序:
/************************************************************
LCD采用HD61202,128x64
控制单片机ATMage8L 8MHz
2003.12.5 huxiangming.
************************************************************/
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include "hz.h"
/*LCD引脚定义 PB0-7对应LCD DB0-DB7*/
#define CS1 PORTC.2
#define CS2 PORTC.3
#define RS PORTC.4
#define RW PORTC.5
#define E PORTD.4
void LCD_NOP(void)
{
unsigned char i;
for(i=0;i<50;i++);
}
void Delay(int x)
{
int i,j;
for(j=0;j<x;j++){
for(i=0;i<250;i++);
}
}
//LCD左半屏写命令字
void LCD_Write_ComL(unsigned char x)
{
CS1=0;CS2=1;LCD_NOP();
RS=0;
E=1;LCD_NOP();
RW=0;
PORTB=x;
E=1;
E=0;
CS1=1;CS2=1;
}
//LCD左半屏写数据
void LCD_Write_DatL(unsigned char x)
{
CS1=0;CS2=1;LCD_NOP();
RS=0;
E=1;LCD_NOP();
RS=1;
RW=0;
PORTB=x;
E=1;
E=0;
CS1=1;CS2=1;
}
//LCD右半屏写命令字
void LCD_Write_ComR(unsigned char x)
{
CS1=1;CS2=0;LCD_NOP();
RS=0;
E=1;LCD_NOP();
RW=0;
PORTB=x;
E=1;
E=0;
CS1=1;CS2=1;
}
//LCD右半屏写数据
void LCD_Write_DatR(unsigned char x)
{
CS1=1;CS2=0;LCD_NOP();
RS=0;
E=1;LCD_NOP();
RS=1;
RW=0;
PORTB=x;
E=1;
E=0;
CS1=1;CS2=1;
}
//LCD初始化
void LCD_Init(void)
{
LCD_Write_ComL(0x3e);LCD_Write_ComR(0x3e);
LCD_Write_ComL(0x3f);LCD_Write_ComR(0x3f);
LCD_Write_ComL(0xc0);LCD_Write_ComR(0xc0);
}
//LCD清屏
void LCD_Clr(void)
{
unsigned char i,j;
for(j=0;j<8;j++){
LCD_Write_ComL(0xb8|j);
LCD_Write_ComL(0x40);
LCD_Write_ComR(0xb8|j);
LCD_Write_ComR(0x40);
for(i=0;i<64;i++){
LCD_Write_DatL(0x00);
LCD_Write_DatR(0x00);
}
}
}
//显示8x16字符,位置按8x8一个点来定 x:列坐标 y:行坐标 chrx:显示字符
LCD_WrCHr8x16(unsigned char x,unsigned char y,unsigned char chrx){
unsigned char i;
unsigned int chr_m;
chr_m=chrx;
chr_m=chr_m*16;
if(y>=8){
y=y-8;
LCD_Write_ComR(0xb8|x);
LCD_Write_ComR(0x40|y<<3);
for(i=0;i<8;i++){
LCD_Write_DatR(Ezk[chr_m+i]);
}
LCD_Write_ComR(0xb9|x);
LCD_Write_ComR(0x40|y<<3);
for(i=8;i<16;i++){
LCD_Write_DatR(Ezk[chr_m+i]);
}
}else{
LCD_Write_ComL(0xb8|x);
LCD_Write_ComL(0x40|y<<3);
for(i=0;i<8;i++){
LCD_Write_DatL(Ezk[chr_m+i]);
}
LCD_Write_ComL(0xb9|x);
LCD_Write_ComL(0x40|y<<3);
for(i=8;i<16;i++){
LCD_Write_DatL(Ezk[chr_m+i]);
}
}
}
//显示16x16字符,位置按8x8一个点来定 x:列坐标 y:行坐标 chrx:显示字符*/
LCD_WrCHr16x16(unsigned char x,unsigned char y,unsigned char chrx){
unsigned char i;
unsigned int chr_m;
chr_m=chrx;
chr_m=chr_m*32;
if(y>=8){
y=y-4;
LCD_Write_ComR(0xb8|x);
LCD_Write_ComR(0x40|y<<3);
for(i=0;i<8;i++){
LCD_Write_DatR(Hzk[chr_m+i]);
}
LCD_Write_ComR(0xb8|x);
LCD_Write_ComR(0x48|y<<3);
for(i=8;i<16;i++){
LCD_Write_DatR(Hzk[chr_m+i]);
}
LCD_Write_ComR(0xb9|x);
LCD_Write_ComR(0x40|y<<3);
for(i=16;i<24;i++){
LCD_Write_DatR(Hzk[chr_m+i]);
}
LCD_Write_ComR(0xb9|x);
LCD_Write_ComR(0x48|y<<3);
for(i=24;i<32;i++){
LCD_Write_DatR(Hzk[chr_m+i]);
}
}else{
LCD_Write_ComL(0xb8|x);
LCD_Write_ComL(0x40|y<<3);
for(i=0;i<8;i++){
LCD_Write_DatL(Hzk[chr_m+i]);
}
LCD_Write_ComL(0xb8|x);
LCD_Write_ComL(0x48|y<<3);
for(i=8;i<16;i++){
LCD_Write_DatL(Hzk[chr_m+i]);
}
LCD_Write_ComL(0xb9|x);
LCD_Write_ComL(0x40|y<<3);
for(i=16;i<24;i++){
LCD_Write_DatL(Hzk[chr_m+i]);
}
LCD_Write_ComL(0xb9|x);
LCD_Write_ComL(0x48|y<<3);
for(i=24;i<32;i++){
LCD_Write_DatL(Hzk[chr_m+i]);
}
}
}
//主程序
void main(void)
{
unsigned int i;
DDRB=0xff;PORTB=0x00;
DDRC=0xff;PORTC=0x00;
DDRD=0x18;
//#asm("wdr");
//#asm("SEI"); //开总中断
Delay(200);
LCD_Init(); //LCD初始化
LCD_Clr(); //LCD清屏
Delay(200);Delay(200);
for(i=0;i<8;i++) LCD_WrCHr8x16(0,i,i); //第一行显示8x16西文字
符
for(i=0;i<8;i++) LCD_WrCHr16x16(2,i*2,i); //第二行显示16x16中文字符
for(i=0;i<8;i++) LCD_WrCHr16x16(4,i*2,i+16); //第三行显示16x16中文字
符
for(i=0;i<8;i++) LCD_WrCHr16x16(6,i*2,i+24); //第四行显示16x16中文字
符
while(1){
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -