📄 my_vp12864.txt
字号:
/*********************************************
This program was produced by the
CodeWizardAVR V1.23.8d Standard
Automatic Program Generator
?Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro
Project :
Version :
Date : 2006-7-14
Author : alan
Company :
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
/*--------------------------- 连线图 ------------------------------------------------
| *MCU---ATmega16* | *MCU---ATmega16* | *MCU---ATmega16* | *MCU---ATmega16*
| *DB0---PORTA.0* | *DB4---PORTA.4* | *WR----PORTB.0* | *RST----PORTB.4*
| *DB1---PORTA.1* | *DB5---PORTA.5* | *RD----PORTB.1*
| *DB2---PORTA.2* | *DB6---PORTA.6* | *CE----PORTB.2*
| *DB3---PORTA.3* | *DB7---PORTA.7* | *CD----PORTB.3*
注: ATmega16: fos:8MHz
***---------------------------------------------------------------------------------*/
#include <mega16.h>
#include <String.h>
#include <delay.h>
#define uchar unsigned char
#define uint unsigned int
#define lcd_WR PORTB.0 /*------ 写使能 "0" 有效 -------------*/
#define lcd_RD PORTB.1 /*------ 读使能 "0" 有效 -------------*/
#define lcd_CE PORTB.2 /*------ 片选使能 "0" 有效 -------------*/
#define lcd_CD PORTB.3 /*------ 选通信号 "0" 数据 "1" 指令 --*/
#define lcd_RST PORTB.4 /*------ 复位使能 "0" 有效 -------------*/
#define lcd_data_out PORTA /*------ 写数据 ------*/
#define lcd_data_in PINA /*------ 读数据 ------*/
#define TXHOME 0x40 /*------ 文本区首址 ----------------------*/
#define TXAREA 0x41 /*------ 文本区宽度(字节数/行)----------*/
#define GRHOME 0x42 /*------ 图形区首址 ----------------------*/
#define GRAREA 0x43 /*------ 图形区宽度(字节数/行)----------*/
#define OFFSET 0x22 /*------ CGRAM偏置地址设置 ---------------*/
#define ADPSET 0x24 /*------ 地址指针位置 --------------------*/
#define AWRON 0xb0 /*------ 自动写设置 --------------------*/
#define AWROFF 0xb2 /*------ 自动读、写结束 -----------------*/
uchar ACC; /*------ 状态位 ----------------- */
uchar STA0; /*------ 状态位 0 读写状态 ------ */
uchar STA1; /*------ 状态位 1 读写状态 ------ */
uchar STA2; /*------ 状态位 2 自动读状态 ---- */
uchar STA3; /*------ 状态位 3 自动写状态 ---- */
/*------------- 字符库 ----------------*/
/*********************************************************/
uchar flash TAB[]={
0x27,0x4F,0x4C,0x44,0x45,0x4E,0x00,0x30,0x41,0x4C,
0x4D,0x00,0x33,0x43,0x49,0x45,0x4E,0x43,0x45,0x00,
0x34,0x45,0x43,0x48,0x4E,0x4F,0x4C,0x4F,0x47,0x59,
0x00,0x23,0x4F,0x0E,0x0C,0x2C,0x54,0x44,0x00,0x00,
0x2E,0x4F,0x0E,0x13,0x11,0x00,0x2A,0x49,0x41,0x4E,
0x53,0x48,0x45,0x00,0x32,0x4F,0x41,0x44,0x13,0x00,
0x3A,0x48,0x41,0x4F,0x51,0x49,0x4E,0x47,0x00,0x30,
0x0E,0x32,0x0E,0x23,0x48,0x49,0x4E,0x41,0x00,0x00,
0x30,0x4F,0x53,0x54,0x43,0x4F,0x44,0x45,0x1A,0x00,
0x15,0x12,0x16,0x10,0x14,0x10,0x00,0x00,0x00,0x00,
0x34,0x25,0x2C,0x1A,0x00,0x18,0x16,0x0D,0x17,0x15,
0x18,0x0D,0x12,0x12,0x12,0x13,0x11,0x19,0x16,0x00,
0x57,0x57,0x57,0x0E,0x47,0x50,0x54,0x0E,0x43,0x4F,
0x4D,0x0E,0x43,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,
0x25,0x3F,0x4D,0x41,0x49,0x4C,0x1A,0x4A,0x4D,0x47,
0x50,0x43,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x20,0x50,0x55,0x0E,0x5A,0x48,0x41,0x4F,0x51,0x49,
0x4E,0x47,0x0E,0x47,0x44,0x0E,0x43,0x4E,0x00,0x00};
/*********************************************************/
/*------------ 读状态位 ----------------*/
/*********************************************************/
uchar read_port()
{
DDRA = 0xff; /*----- PORTA定义为输出 -----*/
lcd_data_out = 0xff;
DDRA = 0x00; /*----- PORTA定义为输入 -----*/
ACC = 0xff;
lcd_CD = 1;
lcd_WR = 1;
lcd_RD = 0;
//_nop_();
delay_us(2);
ACC &= lcd_data_in;
lcd_RD = 1;
STA0 = ACC & 0x01; /*----- 读状态字 位 0 -----*/
STA1 = (ACC & 0x02) >> 1; /*----- 读状态字 位 1 -----*/
STA2 = (ACC & 0x04) >> 2; /*----- 读状态字 位 2 -----*/
STA3 = (ACC & 0x08) >> 3; /*----- 读状态字 位 3 -----*/
DDRA = 0xff;
return(ACC);
}
/*********************************************************/
/*---------------- 自动写数据 ---------------*/
/*********************************************************/
void auto_write_data(uchar data)
{
do{
read_port();
}
while(STA3 == 0);
DDRA = 0xff;
lcd_CD = 0;
lcd_WR = 1;
lcd_RD = 0;
lcd_data_out = data;
lcd_RD = 1;
}
/*********************************************************/
/*--------------- 写命令 -----------------*/
/*********************************************************/
void write_command(uchar command)
{
do{
read_port();
}
while(STA0 & STA1 ==0);
lcd_CD = 1;
lcd_WR = 1;
lcd_RD = 0;
lcd_data_out = command;
lcd_RD = 1;
}
/*********************************************************/
/*----------------- 写一个数据 ----------------*/
/*********************************************************/
void write_one_data(uchar data)
{
do{
read_port();
}
while(STA0 & STA1 ==0);
lcd_CD = 0;
lcd_WR = 1;
lcd_RD = 0;
lcd_data_out = data;
lcd_RD = 1;
}
/*********************************************************/
/*----------- 写两个数据 --- 一个命令 ----------*/
/*********************************************************/
void ComTwoData(uchar dat_l,uchar dat_h,uchar Com)
{
write_one_data(dat_l);
write_one_data(dat_h);
write_command(Com);
}
/*********************************************************/
/*----------------- 液晶初始化 ------------------*/
/*********************************************************/
void lcd_init()
{
ComTwoData(0x00,0x00,TXHOME); /*-- 文本首址设置: 0x0000 -----*/
ComTwoData(0x10,0x00,TXAREA); /*-- 文本宽度 : 16字节 / 行 -----*/
ComTwoData(0x08,0x00,GRHOME); /*-- 图形首址设置: 0x0008 -----*/
ComTwoData(0x10,0x00,GRAREA); /*-- 图形宽度 : 16字节 / 行 -----*/
write_command(0x81); /*-- "异或"合成 -------------*/
ComTwoData(0x02,0x00,OFFSET); /*-- CGRAM偏置地址 : 0x0020 -----*/
write_command(0x9c); /*-- 文本 ,图形显示开 ---------*/
}
/*********************************************************/
/*---------------- 全屏清除 ----------------*/
/*********************************************************/
void full_clr(uchar ad_l,uchar ad_h, uint count,uchar data)
{
uchar i;
ComTwoData(ad_l,ad_h,ADPSET); /*------- 设置地址 -------*/
write_command(AWRON); /*------- 开自动写 -------*/
for(i = 0; i < count; i++)
{
auto_write_data(data); /*----- data 设置清屏状态 -----*/
}
write_command(AWROFF); /*------ 自动写结束 -------*/
}
/*********************************************************/
/*---------------- 显示CGROM字符 -----------------*/
/*********************************************************/
void disp_CGROM(uchar ad_l,uchar ad_h,uint count ,uchar flash *p)
{
uint i;
ComTwoData(ad_l,ad_h,ADPSET); /*------- 设置地址 -------*/
write_command(AWRON); /*------- 开自动写 -------*/
for(i = 0; i < count; i++)
{
auto_write_data(p[i]); /*------ 写字符 ------------*/
}
write_command(AWROFF); /*------ 自动写结束 -------*/
}
/*********************************************************/
/*---------------- 显示函数 ------------------*/
/*********************************************************/
void lcd_disp()
{
full_clr(0,0,128,0);
delay_ms(500);
disp_CGROM(0,0,128,TAB);
delay_ms(800);
delay_ms(800);
delay_ms(800);
}
/*********************************************************/
void main(void)
{
PORTA = 0x00;
DDRA = 0xff;
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
TCCR0 = 0x00;
TCNT0 = 0x00;
OCR0 = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
ASSR = 0x00;
TCCR2 = 0x00;
TCNT2 = 0x00;
OCR2 = 0x00;
MCUCR = 0x00;
MCUCSR = 0x00;
TIMSK = 0x00;
ACSR = 0x80;
SFIOR = 0x00;
//SP = 0x5f;
lcd_RST = 0;
delay_us(2);
lcd_RST = 1;
lcd_CE = 0;
lcd_WR = 1;
lcd_RD = 1;
lcd_init();
while (1)
{
//lcd_disp();
//full_clr(0,0,128,0xff);
ComTwoData(0x01,0x00,0x21);
ComTwoData(0x01,0x00,0x24);
ComTwoData(0x01,0x00,0xa6);
//write_command(0xa6);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -