12232点阵屏驱动程序
////////////////////////////////////////////////////////////////////////////////
//调用方式:void send_mi(uchar instuction)
//函数说明:发指令instruction到主窗口(内函数,私有,用户不能直接调用)
////////////////////////////////////////////////////////////////////////////////
void send_mi(uchar instruction)
{
clr_E2(); //关S
set_E1(); //开M
wait_ready();
clr_A0(); //指令
clr_WR(); //写触发
NOP();
lcd_data = instruction; //指令码
NOP();
clr_E1(); //关M
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void OutMD(uchar i)
//函数说明:发数据data到主窗口(内函数,私有,用户不能直接调用)
////////////////////////////////////////////////////////////////////////////////
void send_md(uchar c)
{
clr_E2(); //关S
set_E1(); //开M
wait_ready();
set_A0(); //数据
clr_WR(); //写触发
NOP();
lcd_data = c; //数据
NOP();
clr_E1(); //关M
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void send_si(uchar instruction)
//函数说明:发指令instruction到从窗口(内函数,私有,用户不能直接调用)
////////////////////////////////////////////////////////////////////////////////
void send_si(uchar instruction)
{
clr_E1(); //关M
set_E2(); //开S
wait_ready();
clr_A0(); //指令
clr_WR(); //写触发
NOP();
lcd_data=instruction; //指令码
NOP();
clr_E2(); //关S
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void send_sd(uchar data)
//函数说明:发数据data到从窗口(内函数,私有,用户不直接调用)
////////////////////////////////////////////////////////////////////////////////
void send_sd(uchar c)
{
clr_E1();
set_E2();
wait_ready();
set_A0(); //数据
clr_WR(); //写触发
lcd_data = c;
NOP();
clr_E2();
}
////////////////////////////////////////////////////////////////////////////////
//等待ready:等待LCD内部操作完成
////////////////////////////////////////////////////////////////////////////////
void wait_ready(void)
{
// DDRA = 0x00; //PA口输入
clr_A0(); //指令
set_WR(); //读
NOP();
while(lcd_data & status_busy); //读入LCD状态,1=忙,一直等待LCD内部操作完成
//DDRA = 0xff; //重新置PA口输出
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void lcd_init(void)
//函数说明:122x32LCD初始化,开机后仅调用一次
////////////////////////////////////////////////////////////////////////////////
void lcd_init(void)
{
send_mi(reset);//复位m-left,s-right
send_si(reset);
send_mi(disp_off);//关闭显示
send_si(disp_off);
send_mi(dynamic_driver);//动态驱动
send_si(dynamic_driver);
send_mi(clk32); //1/32占空比
send_si(clk32);
send_mi(adc_select);//clockwise
send_si(adc_select);
send_mi(mode_write);//写模式
send_si(mode_write);
send_mi(col_addr_set);
send_mi(disp_start_line);//归回零列,设定显示起始行首
send_si(col_addr_set);
send_si(disp_start_line);
send_mi(disp_on); //开显示
send_si(disp_on);
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void lcd_clr(void)
//函数说明:清屏
////////////////////////////////////////////////////////////////////////////////
void lcd_clr(void)
{
uchar i, page;
for (page=0;page<4;page++)
{
send_mi(page_addr_set|page);
send_si(page_addr_set|page);
send_mi(0); //主窗口设置为0列
send_si(0); //从窗口设置为0列
for (i=0;i<62;i++)
{
send_md(0x00);
send_sd(0x00);
}
}
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void set_page(uchar page)
//函数说明:同时设置主(右)从(左)显示页为0-3页
////////////////////////////////////////////////////////////////////////////////
void set_page(uchar page)
{
send_mi(page_addr_set|page);
send_si(page_addr_set|page);
}
////////////////////////////////////////////////////////////////////////////////
//调用方式:void SetAddress(uchar address)
//函数说明:同时设置主(右)从(左)列地址为0-61列
////////////////////////////////////////////////////////////////////////////////
void set_address(uchar address)
{
send_mi(address&0x7F); //&0x7F,考虑到防止越限
send_si(address&0x7F);
}
12232点阵屏驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)