?? lcd._c
字號:
// Project :12864 LCD Display
// Writer : you hu
// ICC-AVR application builder :2005-7-12
// Target : M128
// Crystal: 8.0000Mhz
// Description : display chinese
// 縱向取模方式 16*16字體
#include <iom128v.h>
#include <macros.h>
#include "chinese.h"
#include "lcd.h"
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char flag;
void port_init(void)
{
//訪問外部ram的總線端口
PORTA = 0x00;
DDRA = 0x00;
PORTC = 0x00;
DDRC = 0xFF;
}
void check_busy(uchar cs) //查忙函數
{
uchar temp;
while(temp)
{
if(cs)
temp=R_staus&0X80; //將忙狀態讀到temp中進行確定
else
temp=L_staus&0X80;
}
}
void LCD_Clean(void)
{
unsigned char page=0,y; //定義表示頁和列的局部變量
for(page=0;page<8;page++)
{
//LCD左半屏的操作
check_busy(0);
L_command=LCD_PAGE+page; //設置LCD左半屏頁地址
check_busy(0);
L_command=LCD_Y;
//LCD右半屏的操作
check_busy(1);
R_command=LCD_PAGE+page; //設置LCD右半屏頁地址
check_busy(1);
R_command=LCD_Y;
for(y=0;y<64;y++)
{
L_data=0x00;
R_data=0x00;
}
}
}
void LCD_Init(void) //LCD初始化子函數
{
/*首先關閉12864的顯示*/
check_busy(0); //LCD左半屏正在工作,等待......
L_command=LCD_OFF; //先關閉LCD左半屏的顯示
check_busy(1); //LCD右半屏正在工作,等待......
R_command=LCD_OFF; //先關閉LCD右半屏的顯示
/*開啟12864的顯示*/
check_busy(0);
L_command=LCD_ON; //打開LCD左半屏的顯示
check_busy(1);
R_command=LCD_ON; //打開LCD右半屏的顯示
/*設置LCD顯示的起始行*/
check_busy(0);
L_command=LCD_X; //LCD左半屏起始行為0
check_busy(1);
R_command=LCD_X; //LCD右半屏起始行為0
}
void init_devices(void)
{
XMCRA = 0x00; //外部存儲器控制
XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存儲高位地址屏蔽,釋放端口C
port_init();
MCUCR = 0x80; //外部SRAM使能
}
/*******************cs為左右屏選,page為頁數選擇(0~15)********************************
*******************y為水平位置選擇(0~3),datas指針指向漢字存儲的數組地址 ********************/
void write_chineseH(uchar cs,uchar page,uchar y,const unsigned char *datas) //上半部分顯示
{
uchar i;
R_command=LCD_PAGE+page; //設置LCD右半屏頁地址
L_command=LCD_PAGE+page; //設置LCD左半屏頁地址
R_command=LCD_Y+y*16; //設置水平顯示位置
L_command=LCD_Y+y*16;
for(i=0;i<16;i++)
{
if(cs) R_data=*datas; //右半屏顯示
else L_data=*datas; //左半屏顯示
*datas++;
}
}
void write_chineseL(uchar cs,uchar page,uchar y,const unsigned char *datas) //下半部分顯示
{
uchar i;
check_busy(1);
R_command=LCD_PAGE+page; //設置LCD右半屏頁地址
L_command=LCD_PAGE+page; //設置LCD左半屏頁地址
R_command=LCD_Y+y*16; //設置水平顯示位置
L_command=LCD_Y+y*16;
for(i=0;i<16;i++)
{
if(cs) R_data=*datas; //右半屏顯示
else L_data=*datas; //左半屏顯示
*datas++;
}
}
void main(void)
{
init_devices();
LCD_Clean();
LCD_Init();
write_chineseH(0,0,3,you1);
write_chineseL(0,1,3,you2);
write_chineseH(1,0,0,hu1);
write_chineseL(1,1,0,hu2);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -