📄 12864 avr.txt
字号:
MS12864R-1液晶驱动(mega16)
参考了蓝水天下的程序,今天终于我的MS12864R-1液晶终于能显示文字了,谢谢蓝兄的无私奉献!
下面是我的mega16程序:
//ICC-AVR application builder : 2007-8-2 14:20:35
// Target : M16
// Crystal: 4.0000Mhz
/***************
PA2-->E(SCLK)
PA1-->R/W(SID)
PA0-->RS(CS)
***************/
#include <iom16v.h>
#include <macros.h>
#define unint unsigned int
#define unchar unsigned char
#define set_CS DDRB|=(1<<0);PORTB|=(1<<0)
#define set_SID DDRB|=(1<<1);PORTB|=(1<<1)
#define set_SCLK DDRB|=(1<<2);PORTB|=(1<<2)
#define clr_CS DDRB|=(1<<0);PORTB&=~(1<<0)
#define clr_SID DDRB|=(1<<1);PORTB&=~(1<<1)
#define clr_SCLK DDRB|=(1<<2);PORTB&=~(1<<2)
unchar character1[]="河海大学常州校区";
unchar character2[]="计算机及信息学院";
unchar character3[]="自动化20042513班";
unchar character4[]="牛德明[20042189]";
unchar adress_table[]=
{
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,//第三行汉字位置
0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,//第四行汉字位置
};
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//写一字节数据到12864
void write_byte(unchar data)
{
unchar i,temp_data;
for(i=0;i<8;i++)
{
temp_data=data;
temp_data<<=i;
if(temp_data&0x80){set_SID;}
else {clr_SID;}
set_SCLK;
clr_SCLK;
}
}
//写命令到12864
void write_command(unchar command)
{
set_CS;
write_byte(0xF8); //发送S_ID
write_byte(command&0xF0); //发送H_data
write_byte((command&0x0F)<<4); //发送L_data
clr_CS;
}
//写数据到12864
void write_data(unchar data)
{
set_CS;
write_byte(0xFA); //发送S_ID
write_byte(data&0xF0); //发送H_data
write_byte((data&0x0F)<<4); //发送L_data
clr_CS;
}
//复位12864
void reset_12864(void)
{
write_command(0x30);//功能设置 8位数据,基本指令
write_command(0x0C); //显示状态 ON,游标OFF,反白OFF
write_command(0x01); //清除显示
write_command(0x02); //地址归位
write_command(0x80); //设置DDRAM地址
}
//显示函数
void display_CGROM(unchar row,unchar column,unchar *p)
{
while(row<4&&(*p)!='\0')
{
while(column<8&&(*p)!='\0')
{
write_command(adress_table[row*8+column]);
write_data(*p++);
write_data(*p++);
column++;
}
column=0;
row++;
}
}
//
void main(void)
{
init_devices();
reset_12864();
display_CGROM(0,0,character1);
display_CGROM(1,0,character2);
display_CGROM(2,0,character3);
display_CGROM(3,0,character4);
while(1){;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -