液晶屏AVR驱动程序
来源:互联网 发布:淘宝售后有效期是多久 编辑:程序博客网 时间:2024/04/28 20:24
液晶屏为LM6065,控制芯片为RA8802。
最基本的显示程序,显示一行字:
"型号:LM6065 芯片:RA8802 "
使用PORTA端口作为数据口,PORTD.2-PORTD.6共5个脚作为控制口。
#include <mega32.h>
#include <delay.h>
#define uchar unsigned char // 0~255
#define uint unsigned int // 0~65535
#define _LED PORTB.3
#define _SPK PORTB.2
#define lcd_bus PORTA
#define _RS PORTD.2
#define _RD PORTD.3
#define _CS PORTD.4
#define _WR PORTD.5
#define _RST PORTD.6
// 厂家:http://www.topwaydisplay.com 型号:LM6065 芯片:RA8802
uchar logo[]=...{"型号:LM6065 芯片:RA8802 "};
//=============================================================================
// 写命令
//=============================================================================
void display_command_sent(uchar command)
...{
_WR = 1;
_RS = 0;
lcd_bus = command;
_CS = 0;
delay_us(1);
_WR = 0;
delay_us(1);
_WR = 1;
delay_us(1);
_CS = 1;
delay_us(10);
}
//=============================================================================
// 写数据
//=============================================================================
void display_data_sent(uchar disdata)
...{
_WR = 1;
_RS = 1;
lcd_bus = disdata;
_CS = 0;
delay_us(1);
_WR = 0;
delay_us(1);
_WR = 1;
delay_us(1);
_CS = 1;
delay_us(10);
}
//=============================================================================
// 清屏
//=============================================================================
void LCD_clean(void)
...{
uint i,j;
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
for(i = 0;i<64; i++)
...{
for(j = 0;j < 30; j++)
display_data_sent(0x00);
}
}
//=============================================================================
// 初始化
//=============================================================================
void LCD_mode_set(void)
...{
_RST = 1;
_RST = 0;
delay_ms(50);
_RST = 1;
delay_ms(20);
display_command_sent(0x00);display_command_sent(0xcd); //LCD控制寄存器
display_command_sent(0x08);display_command_sent(0x73); //通用寄存器
display_command_sent(0x10);display_command_sent(0xe9); //光标控制寄存器
display_command_sent(0x18);display_command_sent(0x20); //光标大小控制寄存器
display_command_sent(0x20);display_command_sent(0x1d); //工作窗右边界寄存器
display_command_sent(0x28);display_command_sent(0x1d); //显示窗右边界寄存器
display_command_sent(0x30);display_command_sent(0x3f); //工作窗底部边界寄存器
display_command_sent(0x38);display_command_sent(0x3f); //显示窗底部边界寄存器
display_command_sent(0x40);display_command_sent(0x00); //工作窗左边界寄存器
display_command_sent(0x50);display_command_sent(0x00); //工作窗顶部边界寄存器
display_command_sent(0x48);display_command_sent(0x00); //显示窗左边界寄存器
display_command_sent(0x58);display_command_sent(0x00); //显示窗顶部边界寄存器
display_command_sent(0x60);display_command_sent(0x00); //X方向光标寄存器
display_command_sent(0x70);display_command_sent(0x00); //Y方向光标寄存器
// display_command_sent(0x80);display_command_sent(0x40); //FRCA控制寄存器(初始化时芯片建议值)
display_command_sent(0x80);display_command_sent(0x23); //闪烁时间寄存器
display_command_sent(0x90);display_command_sent(0x3e); //移位时钟控制寄存器
display_command_sent(0xe0);display_command_sent(0x00); //数据模式寄存器
display_command_sent(0xf0);display_command_sent(0xa0); //字体控制寄存器
delay_ms(2);
}
//=============================================================================
// 初始化,闪亮LED
//=============================================================================
void initport(void)
...{
uchar i;
DDRA = 0xFF; /**//* output */
PORTA = 0xFF; /**//* all off */
DDRD = 0xFF; /**//* output */
PORTD = 0xFF; /**//* all off */
DDRB = 0xFF;
PORTB = 0xFF;
for(i=0; i<20; i++)
...{
_LED = ~_LED;
delay_ms(50);
}
_SPK = 0;
delay_ms(150);
_SPK = 1;
_CS = 1;
_RD = 1;
_WR = 1;
_RS = 1;
lcd_bus = 0xff;
}
//=============================================================================
// LCD显示LOGO
//=============================================================================
uchar *txtdata;
void LOGO_display(void)
...{
uchar i,j,tempdata;
txtdata = &logo[0];
display_command_sent(0x60);display_command_sent(0x00);
display_command_sent(0x70);display_command_sent(0x00);
display_command_sent(0x00);display_command_sent(0xcd);
for(j = 0;j < 1; j++)
...{
for(i = 0;i < 30; i++)
...{
tempdata = (*(txtdata+(j*30)+i));
display_data_sent(tempdata);
}
}
}
//=============================================================================
// 主程序
//=============================================================================
void main(void)
...{
initport( );
LCD_mode_set( );
LCD_clean( );
while(1)
...{
LOGO_display( );
delay_ms(1000);
}
}
- 液晶屏AVR驱动程序
- OCMJ8X15B金鹏液晶屏驱动程序+字库规律
- HT1621B断码芯片液晶屏驱动程序
- nRF24L01 AVR 发送接收驱动程序
- 液晶屏
- AVR单片机(ATmega16L)DS18B20温度传感器驱动程序
- AVR
- 液晶屏文字
- 液晶屏种类
- LVDS液晶屏和TTL液晶屏的区别
- Linux液晶屏驱动开发
- 解读LED液晶屏
- 液晶屏按键处理
- Linux液晶屏驱动开发
- 卡西欧液晶屏的特点
- TFT STN液晶屏区别
- Linux液晶屏驱动开发
- 液晶屏测试小程序
- 我的电脑梦
- 再谈人寿的涨停
- oracle9i 中文视频
- javascript引用对象的方法
- Rational SoDA V7.0 报JVM 失败错误的解决方法
- 液晶屏AVR驱动程序
- 内存映射文件技术
- SharePoint Portal Server 2003视频教程
- 电路基本知识
- 深入透析样式表滤镜
- linux c语言 select函数用法
- JavaScript常用脚本之一
- Log4Net详细使用教程
- Win32下OpenSSL的安装方法