历史上的今天
今天是: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); } /*********************************************************/ /* */ /* 主程序 */ /* */
史海拾趣
|
PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。 ...… 查看全部问答> |
|
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 应用方面的开 ...… 查看全部问答> |
|
卖ARM9开发板一套,源码、芯片资料俱全,可供从事开发人员或者想从事嵌入式开发的人员使用。如有意,信箱联系:ruyon@163.com 卖ARM9开发板一套,源码、芯片资料俱全,可供从事开发人员或者想从事嵌入式开发的人员使用。如有意,信箱联系:ruyon@163.com… 查看全部问答> |
|
单位一台控制飞剪(切头切尾)的6RA70控制箱出现报F004故障,有时几个班出现一次,有时一个班出现几次。在这之前,出现过70箱面板无显示,于是更换了电源板(在原电源板进线电源和保险都正常的情况下,认为是电源板有问题),当时试车正常,但之后 ...… 查看全部问答> |




