历史上的今天
返回首页

历史上的今天

今天是:2025年01月24日(星期五)

正在发生

2018年01月24日 | 89C51单片机控制HT1621B驱动LCD(C程序)

2018-01-24 来源:eefocus

//********WAVE-E6000/T***************
 //*MCU:          AT89C51            *
 //*MCU-crystal:  12M                *

 //***********************************
 #include
 #include
 #define uint unsigned int
 #define uchar unsigned char
 //****************************
 sbit P1_0=P1^0;
 sbit P1_1=P1^1;
 sbit P1_2=P1^2;
 sbit P2_0=P2^0;
 sbit P2_1=P2^1;
 sbit P2_2=P2^2;
 sbit P2_3=P2^3;
 sbit P2_4=P2^4;
 sbit P2_5=P2^5;
 sbit P2_6=P2^6;
 sbit P2_7=P2^7;
 sbit P3_6=P3^6;
 sbit P3_7=P3^7;
 sbit P0_7=P0^7;
 //****************************
 //定义LCD的连接端口
 //****************************
 #define LCD_RS   P2_5
 #define LCD_RW   P2_6
 #define LCD_EN   P2_7
 #define BUSY     P0_7
 #define LCDPort0 P0
 #define SCL      P3_6
 #define SDA      P3_7
 #define K1       P1_0
 #define K2       P1_1
 #define K3       P1_2
 //********************************
 static uchar bdata StateREG;   //可位寻址的状态寄存器
 sbit CY1 = StateREG^1;          //状态
 //********************************
 uchar  Command_Code;
 uchar  Command_Code_No;
 uchar  Buf_Code;
 uchar  Buf_Add;
 uchar  cont;  
 uchar  code Table[]={0x48,0x65,0x6c,0x6c,0x6f,0x20,0x52,0x49,
                      0x53,0x49,0x4f,0x4e,0x00};  //"Hello RISION"
 //******************************
 //函数原型声明 *****************
 //******************************
 void  LCDBusy(void);
 void  LCDWrite_Command(void);
 void  LCDWrite_Command_No(void);
 void  INITLCD(void);
 void  LCDWrite_Data(uchar Buf_Data);
 void  _nop_(void);
 void  delay_ms(uchar ms);
 void  LCDWrite_String(void);
 void  STA(void);
 void  STOP(void);
 void  Write_DATA();
 void  Read_DATA();
 void  WRBYT(uchar EEROM_Buf);
 //*******************************
 //===============================
 //延时最大255毫秒
 //===============================
 void delay_ms(uchar ms)
 {
  uchar i,j;
  for(j=0;j   for (i=0;i<124;i++)
   _nop_();
 }
 //===========================
 //写一个命令字节,不进行忙检测
 //===========================
 void LCDWrite_Command_No()
 {
       LCD_EN=0;
       LCD_RS=0;
       LCD_RW=0;
       LCDPort0=Command_Code_No;
       LCD_EN=1 ;
       _nop_();
       LCD_EN=0;
 }
 //===========================
 //写一个命令字节,进行忙检测
 //===========================
 void LCDWrite_Command()
 {
       LCDBusy();
       LCD_EN=0;
       LCD_RW=0;
       LCD_RS=0;
       LCD_EN=1;
       LCDPort0=Command_Code;
       LCD_EN=0;
 }
 //===========================
 //LCD状态检测
 //===========================
 void LCDBusy()
 {
     uchar BUSY_A;
   do{
      LCDPort0=0xFF;
      LCD_EN=0;
      LCD_RS=0;
      LCD_RW=1;
      LCD_EN=1;
      BUSY_A=LCDPort0;
      LCD_EN=0;
      }
     while ((BUSY_A&0x80)!=0x00);
 }
 //****************************
 void INITLCD()
 {
     delay_ms(15);
     Command_Code=0x38;
     LCDWrite_Command_No();
     delay_ms(5);
     Command_Code=0x38;
     LCDWrite_Command_No();
     delay_ms(5);
     Command_Code=0x38;
     LCDWrite_Command_No();

     Command_Code=0x38;
     LCDWrite_Command();  //设定LCD为16*2显示,5*7点阵,8位数据接口
     Command_Code=0x01;
     LCDWrite_Command();  //显示清屏。
     Command_Code=0x06;
     LCDWrite_Command();  //显示光标自动右移,整屏不移动。
     Command_Code=0x0C;
     LCDWrite_Command();  //开显示,不显示光标
 }
 //********************************
 //===========================
 //写一个命令字节,进行忙检测
 //===========================
 void LCDWrite_Data(uchar Buf_Code)
 {
 //      Buf_Code=Buf_Code|0x40;
       LCDBusy();
       LCD_EN=0;
       LCD_RW=0;
       LCD_RS=1;
       LCD_EN=1;
       LCDPort0=Buf_Code;
       LCD_EN=0;
 }
 //****************************
 void LCDWrite_String()
 {
   Command_Code=0xC2;cont=0;
     do{
        LCDWrite_Command();
        Command_Code++;
        LCDWrite_Data(Table[cont]);
        cont++;
        }
      while(Table[cont]!=0x00);
      return;
 }
 //****************************
 void STA()
 {
    SDA=1;
    _nop_();
    _nop_();
    SCL=1;
    _nop_();
    _nop_();
    SDA=0;
 }
 //****************************
 void STOP()
 {
    SDA=0;
    _nop_();
    _nop_();
    SCL=1;
    _nop_();
    _nop_();
    SDA=1;
 }
 //****************************
 void main()
 {
   INITLCD();
   Command_Code=0x80;
   LCDWrite_Command();  //将数据指针设置到第一行的第一个字符。
   LCDWrite_Data(0x37);
   LCDWrite_String();
   while(1);
   {;}
 }


推荐阅读

史海拾趣

EKIT公司的发展小趣事

随着全球数字化进程的加速推进,华为坤灵(HUAWEI eKit)不断加快其全球市场拓展的步伐。通过与全球各地的分销伙伴紧密合作,HUAWEI eKit成功将其产品和服务推广到了世界各地。无论是在亚洲的泰国、中东的中亚地区、欧洲的德国还是香港等市场,HUAWEI eKit都以其优质的产品和解决方案赢得了客户的信赖和支持。同时,HUAWEI eKit还不断加大研发投入力度,推出更多创新产品和技术解决方案以满足不同市场的需求。这些努力使得HUAWEI eKit在全球电子行业中逐渐崭露头角并实现了快速发展。

请注意,由于这些故事是虚构的,可能并不完全符合实际的历史事实。但它们试图捕捉华为坤灵(HUAWEI eKit)在电子行业中的发展轨迹和关键里程碑。

G-Two Inc公司的发展小趣事

背景:在光伏胶膜领域取得成功后,福斯特开始寻求多元化发展。

发展:公司依托在光伏材料领域的技术积累和市场优势,逐步向电子电路、锂电等新材料领域拓展。同时,公司还成立了新材料研究院,专注于新材料的研发和创新。

成果:目前,福斯特在电子电路、锂电等领域也取得了显著成绩,为公司带来了新的增长点。

Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

AIE公司自2005年成立以来,一直致力于推动电子测试配件的安全规范标准化。公司积极与各大电子厂商、行业协会以及标准化组织展开合作,共同制定了一系列关于测试配件的性能规格和安全标准。这一举措不仅提升了AIE产品的竞争力,也促进了整个电子行业的健康发展。通过与业界的紧密合作,AIE逐渐在电子测试配件领域树立了良好的口碑。

CTS公司的发展小趣事

随着全球化趋势的加强,CTS公司开始积极拓展国际市场。公司在全球范围内设立了多个生产基地和销售网络,以便更好地服务全球客户。同时,CTS还加强了与国际知名企业的合作,共同推动电子行业的发展。

Gemmy Electronics Co Ltd公司的发展小趣事
对于采用声波或超声波驱赶机制的电子驱鼠器,故障可能表现为声音异常、无法发出声音或超声波发射效果不佳等。
AF International公司的发展小趣事

在电子行业发展日新月异的背景下,AF International始终坚持技术创新,不断推出新产品、新技术。公司投入大量资金用于研发,引进先进的生产设备和测试仪器,确保产品质量的稳定提升。此外,AF International还积极与高校、科研机构合作,共同开展技术研发项目,推动电子行业的创新发展。正是这些技术创新成果,使得AF International在行业中始终保持领先地位。

问答坊 | AI 解惑

I2C器件接口IP核的CPLD设计

由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点, ...…

查看全部问答>

有人用过AD1674或AD574吗?

我用AD1674进行AD转换,51控制并进行数据读取,现在发现51无法正确读取,用过的各位帮帮忙…

查看全部问答>

第二讲 照明用LED驱动电源设计基础

LED 的排列方式及LED 光源的规范决定着基本的驱动器要求。LED 驱动器的主要功能就是在一定的工作条件范围下限制流过LED 的电流, 而无论输入及输出电压如何变化。最常用的是采用变压器来进行电气隔离。文中论述了LED 照明设计需要考虑的因素 一、L ...…

查看全部问答>

同是Cortex-M3,恩智浦MCU的秘密武器是什么?

PPT文件, 这是NXP在2009ARM技术研讨会上的发言。 也可知晓NXP LPC1100的原理和应用。 …

查看全部问答>

程序执行到最后一句return时出现异常,帮帮忙!

ARM7 44b0,用ADS1.20编译调试。 代码中定义了这样一个函数device_run,如下。 BOOL device_run(BYTE type) {           BYTE setAttributeValue;           MAC_ENUM status; ...…

查看全部问答>

串口通信

串口通信  …

查看全部问答>

2416+16550 驱动外包

各位仁兄:     小弟有项目如下:     基于S3C2416的串口驱动程序,串口芯片16550,     现在有MDD+PDD(中间层)缺少最低层对16550的初始化代码     由于时间关系,现将项目外包     ...…

查看全部问答>

VS2008如何开发WINDOWS CE .NET 4.2的应用程序

我现在手里有一个MOTOROLA MC1000的设备,装的系统是WINDOWS CE .NET 4.2 在网上看了下 说.NET 可以开发移动设备的程序,所以就下了个试了下 我打开VS2008 - 新建 智能设备项目 - 目标平台我选的是 WINDOWS CE - .NET CF 我选的是 CF2.0 写了个T ...…

查看全部问答>

请大家推荐一款FPGA的学习板

请大家推荐一款FPGA的学习板,准备开学的时候跟着数电课一起学…

查看全部问答>