4720|0

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

12864液晶屏的串行、并行口驱动程序(已验证),注:晶振为7.3728MHz [复制链接]

 //**********************************************************
 //*  文件名:   12864.c   //
 //*  液晶屏:   128*64    //
 //*  设计者:             //
 //*  修改者:             //
 //*  日期:     2011-08-29//
 //***********************************************************
 #include<reg52.h>
 #include<string.h>
 #define  PAGE 0x80
 #define uint unsigned int
 #define uchar unsigned char
// #define dateport_12864lcd   P2  //并行模式下的数据线
 //*********************************************************
 //  用户定义常量
 //*********************************************************
  
    code uchar jieguo[16]={"天厚电子有限公司"};
    sbit SCLK=P0^2;   
    sbit SID=P0^1;
    sbit CS =P0^0;
// sbit PSB=P0^4;  //PSB=0时为串行模式,电路中该引脚接低电平;PSB=1时为并行模式,通过程序设置
 
 //*********************************************************
 // 函 数 名:  delay_12864LCD
 // 函数说明: 延时程序
 // 调用函数:
 // 输入参数:  X-延时时间
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29日
 //*********************************************************
 
 void delay_12864lcd(uint x)
 {    
      while(x--);
 }
 //*********************************************************
 // 函 数 名:  send_byte_12864LCD
 // 函数说明: 串行传送模式下的串行口传送数据
 // 调用函数: delay_12864lcd
 // 输入参数:  send_data—传送数据
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29日
 //**********************************************************
 void  send_byte_12864lcd(uchar send_data)
 {    uchar i;  
      for(i=0;i<8;i++)
          {    
               SID=(bit)(send_data&0x80); //取最高位
               SCLK=0;
      delay_12864lcd(50);
               SCLK=1;
               send_data=send_data<<1;
           }    
 }
/*
 //**********************************************************
 // 函 数 名:  send_command_12864LCD
 // 函数说明: 并行传送模式下的发送指令
 // 调用函数: delay_12864lcd
 // 输入参数:  com-要发送的指令值
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29日
 //***********************************************************
void send_com_12864lcd(uchar com)
 {    
      delay_12864lcd(30);
      SCLK=1;
   CS=0;
   SID=0;
   dateport_12864lcd=com;
   delay_12864lcd(2550);
   SCLK=0;
   delay_12864lcd(2550);
 }
 //**********************************************************
 // 函 数 名:  send_data_12864LCD
 // 函数说明: 并行传送模式下的发送指令
 // 调用函数: delay_12864lcd
 // 输入参数:  com-要发送的数据
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29日
 //***********************************************************
void send_date_12864lcd(uchar date)
 {    
      delay_12864lcd(30);
      SCLK=1;
   CS=1;
   SID=0;
   dateport_12864lcd=date;
   delay_12864lcd(2550);
   SCLK=0;
   delay_12864lcd(2550);
 }
*/
 //**********************************************************
 // 函 数 名:  send_command_12864LCD
 // 函数说明: 串行传送模式下的发送指令和数据
 // 调用函数: delay_12864lcd、send_byte_12864lcd
 // 输入参数:  command_data-要发送的值,com-选择是命令还是数据 1-命令;0-数据
 // 返回参数:  无
 // 设 计 者:
 // 修    改:  1、以前的发送命令和数据2个函数合并为一个
 //            2、发送数据处理改变
 //            3、发送1个字节编成函数
 // 日    期:  2011年8月29日
 //***********************************************************
void send_command_12864lcd(uchar command_data,uchar com)
 {    
      uchar i_data;
   if(com==1)  {i_data=0xf8;}   //send order
      else { i_data=0xfa;}         //send data
      delay_12864lcd(1000);        //4.9ms
      CS=1;
      send_byte_12864lcd(i_data);
      i_data=command_data;
      i_data&=0xf0;                //high 4bit  
      send_byte_12864lcd(i_data);
      i_data=command_data;
      i_data<<=4;                  //low 4bit
      i_data&=0xf0;
      send_byte_12864lcd(i_data);
      CS=0;
 }
 //*********************************************************
 // 函 数 名:  Init_12864LCD
 // 函数说明: 串行传送模式下的液晶屏初始化
 // 调用函数: send_command_12864lcd和delay_12864lcd
 // 输入参数:  无
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29号
 //**********************************************************
 
 void Init_12864LCD(void)
 {   
  // PSB=0;
   delay_12864lcd(40);             //47us
      send_command_12864lcd(0x30,1);  //基本指令集
      delay_12864lcd(20);             //47us
      send_command_12864lcd(0x0e,1);  //显示状态,整体显示ON
      delay_12864lcd(20);             //47us
      send_command_12864lcd(0x01,1);  //清屏
      delay_12864lcd(20);             //47us
   send_command_12864lcd(0x06,1);  //游标右移,AC加一
      delay_12864lcd(20);             //72us
 }
/*
 //*********************************************************
 // 函 数 名:  Init_12864LCD
 // 函数说明: 并行传送模式下的液晶屏初始化
 // 调用函数: send_com_12864lcd和delay_12864lcd
 // 输入参数:  无
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29号
 //**********************************************************
 
 void Init_12864LCD(void)
 {   
      PSB=1;
   delay_12864lcd(20);             //47us
      send_com_12864lcd(0x30);  //基本指令集
      delay_12864lcd(20);             //47us
      send_com_12864lcd(0x0e);  //显示状态,整体显示ON
      delay_12864lcd(20);             //47us
      send_com_12864lcd(0x01);  //清屏
      delay_12864lcd(20);             //47us
   send_com_12864lcd(0x06);  //游标右移,AC加一
      delay_12864lcd(20);             //72us
 }
*/
 //*********************************************************
 // 函 数 名:  tab_12864lcd
 // 函数说明: 串行传送模式下的液晶屏显示
 // 调用函数: send_command_12864lcd和delay_12864lcd
 // 输入参数:  n-要显示的字符在第几行,m-显示的字符的位数, *ps-数据指针
 // 返回参数:  无
 // 设 计 者:
 //日    期:  2011年8月29号
 //*********************************************************
 void tab_12864lcd(uchar n,uchar m,uchar *ps)
 {   
       uchar i,j;
       send_command_12864lcd(PAGE+n,1);
       delay_12864lcd(20);            //72us
       for(i=0;i<m;i++)
       {
           j=*ps;
           send_command_12864lcd(j,0);
           ps++;
        }
 }
/*
 //*********************************************************
 // 函 数 名:  tab_pm_12864lcd
 // 函数说明: 并行传送模式下的液晶屏显示
 // 调用函数: send_com_12864lcd、delay_12864lcd和send_date_12864lcd
 // 输入参数:  n-要显示的字符在第几行,m-显示的字符的位数, *ps-数据指针
 // 返回参数:  无
 // 设 计 者:
 //日    期:  2011年8月29号
 //*********************************************************
 void tab_12864lcd(uchar n,uchar m,uchar *ps)
 {   
       uchar i,j;
       send_com_12864lcd(PAGE+n);
       delay_12864lcd(30);            //72us
       for(i=0;i<m;i++)
       {
           j=*ps;
           send_date_12864lcd(j);
     delay_12864lcd(30);
           ps++;
        }
 }
 */
 //**********************************************************
 // 函 数 名:  main
 // 函数说明: 主函数
 // 调用函数: Init_12864LCD、delay_12864lcd和tab_12864lcd
 // 输入参数:  无
 // 返回参数:  无
 // 设 计 者:
 // 日    期:  2011年8月29号 
 //**********************************************************
    
main()
{
        while(1)  
        {
            delay_12864lcd(5100);     
            Init_12864LCD();
            delay_12864lcd(2550);     
            tab_12864lcd(0,16,jieguo);
            delay_12864lcd(2550);
            tab_12864lcd(16,16,jieguo);                
         }                      
}
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表