⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864 avr.txt

📁 学习12864液晶显示测试
💻 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 + -