📄 lcd.c
字号:
// Project :12864 LCD Display
// Writer : you hu
// ICC-AVR application builder :2005-7-12
// Target : M128
// Crystal: 8.0000Mhz
// Description : display char
#include <iom128v.h>
#include <macros.h>
#include "char.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
// mapping_init();
port_init();
MCUCR = 0x80; //外部SRAM使能
}
void write_Bchar(unsigned char cs,unsigned char n) // 大写字母显示函数
{
unsigned char i;
for(i=0;i<6;i++)
{
if(cs) R_data=big_char[n][i]; //右半屏显示
else L_data=big_char[n][i]; //左半屏显示
}
}
void write_Schar(unsigned char cs,unsigned char n) // 小写字母显示函数
{
unsigned char i;
for(i=0;i<6;i++)
{
if(cs) R_data=small_char[n][i]; //右半屏显示
else L_data=small_char[n][i]; //左半屏显示
}
}
void write_Nchar(unsigned char cs,unsigned char n) //数字显示函数
{
unsigned char i;
for(i=0;i<6;i++)
{
if(cs) R_data=num[n][i]; //右半屏显示
else L_data=num[n][i]; //左半屏显示
}
}
void display_char(void) //字符显示函数
{
unsigned char i;
static unsigned char adder=0;
write_Bchar(0, 24);
write_Schar(0, 14);
write_Schar(0, 20);
for(i=0;i<4;i++){L_data=0x00;}
write_Bchar(0, 7);
write_Schar(0, 20);
adder++;
if(adder>15){flag=1;adder=0;}
}
void main(void)
{
unsigned char i;
init_devices();
LCD_Clean();
LCD_Init();
display_char();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -