历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | 用51单片机控制LCD12864显示屏源程序

2019-10-21 来源:51hei

12864液晶在出厂时其对比度已经调好,所以用户在使用的时候第三管脚可不用接任何东西,本实验板上为了兼容多家12864液晶所以加了液晶对比度调节电位器,若用户使用我们配套的12864液晶可不用管它,液晶的第三管脚悬空就可以。有些液晶功耗比较大,用户在使用的时候可将液晶的第19、20引脚的背光不接,这样字体会很清楚。

 

单片机源程序如下:

/**********************BST-V51实验开发板例程************************

*  平台:BST-V51 + Keil U3 + STC89C52

*  名称: 

*  晶振:11.0592MHZ

*  说明:免费开源,不提供源代码分析.

******************************************************************/

/*******************************************************************/

/*                                                                 */

/* 单片机开发系统演示程序 - 128*64LCD显示显示  */

/*                                                                 */

//;*  LCD型号:TS12864A-3(带汉字库)或兼容型号    控制器ST7920      */

//;*  MCU:AT89S52 ,晶体频率:11.0592MHz                              */

/*                                                                 */

/*******************************************************************/


#include

#include

        

#define uchar unsigned char

#define uint  unsigned int

/*12864端口定义*/

#define LCD_data  P0             //数据口

sbit LCD_RS  =  P2^6;            //寄存器选择输入 

sbit LCD_RW  =  P2^5;            //液晶读/写控制

sbit LCD_EN  =  P2^7;            //液晶使能控制

sbit LCD_PSB =  P1^2;            //串/并方式控制

sbit wela    =  P2^6;

sbit dula    =  P2^7;


uchar code dis1[] = {"看什么看!"};

uchar code dis2[] = {"显示屏而已!"};

uchar code dis3[] = {"少见多怪!"};

uchar code dis4[] = {"那凉哪呆着!"};                  


#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar IRDIS[2];

uchar IRCOM[4];

void delay0(uchar x);  //x*0.14MS

void beep();

void  dataconv();

void lcd_pos(uchar X,uchar Y);  //确定显示位置

/*******************************************************************/

/*                                                                 */

/*  延时函数                                                       */

/*                                                                 */

/*******************************************************************/

void delay(int ms)

{

    while(ms--)

        {

      uchar i;

          for(i=0;i<250;i++)  

           {

            _nop_();                           

                _nop_();

                _nop_();

                _nop_();

           }

        }

}                

/*******************************************************************/

/*                                                                 */

/*检查LCD忙状态                                                    */

/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */

/*                                                                 */

/*******************************************************************/

bit lcd_busy()

{                          

    bit result;

    LCD_RS = 0;

    LCD_RW = 1;

    LCD_EN = 1;

    delayNOP();

    result = (bit)(P0&0x80);

    LCD_EN = 0;

    return(result); 

}

/*******************************************************************/

/*                                                                 */

/*写指令数据到LCD                                                  */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */

/*                                                                 */

/*******************************************************************/

void lcd_wcmd(uchar cmd)

{                          

   while(lcd_busy());

    LCD_RS = 0;

    LCD_RW = 0;

    LCD_EN = 0;

    _nop_();

    _nop_(); 

    P0 = cmd;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0;  

}

/*******************************************************************/

/*                                                                 */

/*写显示数据到LCD                                                  */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */

/*                                                                 */

/*******************************************************************/

void lcd_wdat(uchar dat)

{                          

   while(lcd_busy());

    LCD_RS = 1;

    LCD_RW = 0;

    LCD_EN = 0;

    P0 = dat;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0; 

}

/*******************************************************************/

/*                                                                 */

/*  LCD初始化设定                                                  */

/*                                                                 */

/*******************************************************************/

void lcd_init()


    LCD_PSB = 1;         //并口方式

    

    lcd_wcmd(0x34);      //扩充指令操作

    delay(5);

    lcd_wcmd(0x30);      //基本指令操作

    delay(5);

    lcd_wcmd(0x0C);      //显示开,关光标

    delay(5);

    lcd_wcmd(0x01);      //清除LCD的显示内容

    delay(5);

}

/*********************************************************/

/*                                                                                                                 */

/* 主程序                                                                                    */

/*                                                       */

推荐阅读

史海拾趣

Good-Ark公司的发展小趣事
检查放大器、滤波器等元件是否正常工作,是否存在短路、断路等问题。
上海晶岳(AFSEMI)公司的发展小趣事

在半导体行业中,供应链的稳定性和可靠性对于企业的生存和发展至关重要。晶岳电子深知这一点,因此一直致力于与流片及封装厂建立长期稳定的合作关系。公司的晶圆流片合作伙伴包括大陆的CSMC、ASMC,台湾的世界先进等公司;封装的合作伙伴则包括长电科技、上海芯哲等大陆上市企业。通过与这些合作伙伴的紧密合作,晶岳电子确保了产品质量的稳定性和交货期的可靠性,为公司的持续发展提供了有力保障。

这五个故事只是上海晶岳(AFSEMI)公司发展历程中的一部分,但它们充分展示了晶岳电子在电子行业中的崛起和成长。凭借对技术的执着追求和对市场的敏锐洞察,晶岳电子在激烈的市场竞争中脱颖而出,成为了行业内的一支重要力量。

高通(GENITOP)公司的发展小趣事

1964年,超霸电池的前身——金山工业集团在中国香港地区成立,最初专注于生产9伏干电池,以满足当时收音机等电子产品的需求。这一时期的超霸电池以其稳定的质量和可靠的性能迅速在市场上站稳脚跟。随着电子产品的普及,金山工业敏锐地捕捉到市场机遇,逐步扩大生产规模,为后续的发展奠定了坚实基础。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

First Switchtech公司的发展小趣事

为了应对原材料成本上涨和市场竞争加剧的挑战,First Switchtech公司(或类似公司)实施了供应链优化策略。公司通过与上游供应商建立长期合作关系,实现了原材料的稳定供应和成本的有效控制。同时,公司还引入了先进的生产管理系统,提高了生产效率和产品质量。这些措施不仅降低了产品的生产成本,还增强了公司的市场竞争力。

Anderson Power公司的发展小趣事

为了应对原材料成本上涨和市场竞争加剧的挑战,First Switchtech公司(或类似公司)实施了供应链优化策略。公司通过与上游供应商建立长期合作关系,实现了原材料的稳定供应和成本的有效控制。同时,公司还引入了先进的生产管理系统,提高了生产效率和产品质量。这些措施不仅降低了产品的生产成本,还增强了公司的市场竞争力。

问答坊 | AI 解惑

PIC 8位单片机的分类和特点2

PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。   ...…

查看全部问答>

电脑小车装配图

AVR单片机,与电脑串行通信的电脑小车 …

查看全部问答>

synplify和DC的区别

看到专业论坛里有很多这样的讨论,不禁想在这里提一下,synplify不就是和FPGA对应的用于综合, DC是ASIC后台用于综合的吗?…

查看全部问答>

一道好题,解决大大地给分

C51编译环境。 main.h文件内容如下: #ifndef MAIN_H #define MAIN_H typedef unsigned int u16_t; typedef u16_t ip4addr_t[2]; typedef ip4addr_t ipaddr_t; #define IPADDR0            192 ...…

查看全部问答>

按键是否很少能用到查询方式?

一开始我用查询方式来读取按键 可是由于后面有delay();很大机会按键的时候在delay里读不出来 后来采用了中断,可是中断就这几个口,根本无法满足需求。。。 …

查看全部问答>

各位兄弟大家好,最近老大说让我看看DDK方面的资料,可能是要我做Windows Mobile或者Windows方面的驱动开发了,期望大家给点方向和资料什么的

各位兄弟大家好,最近老大说让我看看DDK方面的资料,可能是要我做Windows Mobile或者Windows方面的驱动开发了,期望大家给点学习的方向和电子版的资料什么的,我基础比较差一点,之前一直使用C++做win mobile 应用方面的开 ...…

查看全部问答>

如何用PWM实现DA转换

我想用STC12C5410AD的单片机的PWM来实现DA转换,但不知如何做才能输出0-4V的电压,AD采集的数据也为0-4V,请大家帮忙.非常感谢…

查看全部问答>

卖ARM9开发板一套,源码、芯片资料俱全,可供从事开发人员或者想从事嵌入式开发的人员使用。如有意,信箱联系:ruyon@163.com

卖ARM9开发板一套,源码、芯片资料俱全,可供从事开发人员或者想从事嵌入式开发的人员使用。如有意,信箱联系:ruyon@163.com…

查看全部问答>

飞剪6RA70控制箱报F004故障

单位一台控制飞剪(切头切尾)的6RA70控制箱出现报F004故障,有时几个班出现一次,有时一个班出现几次。在这之前,出现过70箱面板无显示,于是更换了电源板(在原电源板进线电源和保险都正常的情况下,认为是电源板有问题),当时试车正常,但之后 ...…

查看全部问答>

有没有win7可以安装protel99se的升级版

我是WIN7的,安装了protel99se,但是我不可以开啊,老是说看看有没有升级版的啊,所以各位老大帮帮忙…

查看全部问答>