微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 12232点阵屏驱动程序

12232点阵屏驱动程序

时间:11-18 来源:互联网 点击:

////////////////////////////////////////////////////////////////////////////////
//调用方式: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);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top