?? 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" 數(shù)據(jù) "1" 指令 --*/
#define lcd_RST PORTB.4 /*------ 復(fù)位使能 "0" 有效 -------------*/
#define lcd_data_out PORTA /*------ 寫數(shù)據(jù) ------*/
#define lcd_data_in PINA /*------ 讀數(shù)據(jù) ------*/
#define TXHOME 0x40 /*------ 文本區(qū)首址 ----------------------*/
#define TXAREA 0x41 /*------ 文本區(qū)寬度(字節(jié)數(shù)/行)----------*/
#define GRHOME 0x42 /*------ 圖形區(qū)首址 ----------------------*/
#define GRAREA 0x43 /*------ 圖形區(qū)寬度(字節(jié)數(shù)/行)----------*/
#define OFFSET 0x22 /*------ CGRAM偏置地址設(shè)置 ---------------*/
#define ADPSET 0x24 /*------ 地址指針位置 --------------------*/
#define AWRON 0xb0 /*------ 自動寫設(shè)置 --------------------*/
#define AWROFF 0xb2 /*------ 自動讀、寫結(jié)束 -----------------*/
uchar ACC; /*------ 狀態(tài)位 ----------------- */
uchar STA0; /*------ 狀態(tài)位 0 讀寫狀態(tài) ------ */
uchar STA1; /*------ 狀態(tài)位 1 讀寫狀態(tài) ------ */
uchar STA2; /*------ 狀態(tài)位 2 自動讀狀態(tài) ---- */
uchar STA3; /*------ 狀態(tài)位 3 自動寫狀態(tài) ---- */
/*------------- 字符庫 ----------------*/
/*********************************************************/
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};
/*********************************************************/
/*------------ 讀狀態(tài)位 ----------------*/
/*********************************************************/
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; /*----- 讀狀態(tài)字 位 0 -----*/
STA1 = (ACC & 0x02) >> 1; /*----- 讀狀態(tài)字 位 1 -----*/
STA2 = (ACC & 0x04) >> 2; /*----- 讀狀態(tài)字 位 2 -----*/
STA3 = (ACC & 0x08) >> 3; /*----- 讀狀態(tài)字 位 3 -----*/
DDRA = 0xff;
return(ACC);
}
/*********************************************************/
/*---------------- 自動寫數(shù)據(jù) ---------------*/
/*********************************************************/
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;
}
/*********************************************************/
/*----------------- 寫一個數(shù)據(jù) ----------------*/
/*********************************************************/
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;
}
/*********************************************************/
/*----------- 寫兩個數(shù)據(jù) --- 一個命令 ----------*/
/*********************************************************/
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); /*-- 文本首址設(shè)置: 0x0000 -----*/
ComTwoData(0x10,0x00,TXAREA); /*-- 文本寬度 : 16字節(jié) / 行 -----*/
ComTwoData(0x08,0x00,GRHOME); /*-- 圖形首址設(shè)置: 0x0008 -----*/
ComTwoData(0x10,0x00,GRAREA); /*-- 圖形寬度 : 16字節(jié) / 行 -----*/
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); /*------- 設(shè)置地址 -------*/
write_command(AWRON); /*------- 開自動寫 -------*/
for(i = 0; i < count; i++)
{
auto_write_data(data); /*----- data 設(shè)置清屏狀態(tài) -----*/
}
write_command(AWROFF); /*------ 自動寫結(jié)束 -------*/
}
/*********************************************************/
/*---------------- 顯示CGROM字符 -----------------*/
/*********************************************************/
void disp_CGROM(uchar ad_l,uchar ad_h,uint count ,uchar flash *p)
{
uint i;
ComTwoData(ad_l,ad_h,ADPSET); /*------- 設(shè)置地址 -------*/
write_command(AWRON); /*------- 開自動寫 -------*/
for(i = 0; i < count; i++)
{
auto_write_data(p[i]); /*------ 寫字符 ------------*/
}
write_command(AWROFF); /*------ 自動寫結(jié)束 -------*/
}
/*********************************************************/
/*---------------- 顯示函數(shù) ------------------*/
/*********************************************************/
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);
};
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -