51单片机三线串行驱动12864液晶

发布者:茶叶侠最新更新时间:2018-08-12 来源: eefocus关键字:51单片机  三线串行驱动  12864液晶 手机看文章 扫描二维码
随时随地手机看文章

以前写12864的液晶程序都是用的并行的方式,这种方式焊接起来很麻烦,而且占用的IO口比较多。

今天尝试使用串行方式来驱动该模块。

本程序是基于STC89C52的12864串行模式的程序,硬件电路连接只需要5根线,VCC  GND RS RW  E , 只需要三个个IO 口就可以显示,大大节省了资源。

12864液晶芯片是st7920。自带中文字库。

该程序功能:实现使用12864液晶显示字符、汉字(程序有详细的中文注释)。

已经调试通过,很好用。

下面是电路原理图


其时序图如下:


根据其时序图写出其代码如下:


#include

#include

#include

#include

 

#define uchar unsigned char

#define uint  unsigned int

sbit CS  = P2^7;//第4根线  RS

sbit SID = P2^6;//第5根线  RW

sbit SCK = P2^5;//第6根线  E

uchar code AC_TABLE[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,    //第一行汉字位置  

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,    //第二行汉字位置  

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,    //第三行汉字位置 

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,    //第四行汉字位置 

};

/******************************** 函数名称    :SendByte  串口发送一个字节*****/

void SendByte(uchar Dbyte)

{

     uchar i;

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

     {

           SCK = 0;

           Dbyte=Dbyte<<1;     

           SID = CY;           

           SCK = 1;

           SCK = 0;

     }

}

 

/***********接收一个字节***/

uchar ReceiveByte(void)

{

     uchar i,temp1,temp2;

     temp1 = 0;

     temp2 = 0;

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

     {

           temp1=temp1<<1;

           SCK = 0;

           SCK = 1;            

           SCK = 0;

           if(SID) temp1++;

     }

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

     {

           temp2=temp2<<1;

           SCK = 0;

           SCK = 1;

           SCK = 0;

           if(SID) temp2++;

     }

     return ((0xf0&temp1)+(0x0f&temp2));

}

 

void CheckBusy( void )

{

     do   SendByte(0xfc);      

     while(0x80&ReceiveByte());    

}

 

void WriteCommand(uchar Cbyte )

{

     CS = 1;

     CheckBusy();

     SendByte(0xf8);            

     SendByte(0xf0&Cbyte);     

     SendByte(0xf0&Cbyte<<4);

     CS = 0;

}

 

void WriteData(uchar Dbyte )

{

     CS = 1;

     CheckBusy();

     SendByte(0xfa);            

     SendByte(0xf0&Dbyte);      

     SendByte(0xf0&Dbyte<<4);

     CS = 0;

}

 

uchar ReadData( void )

{

     CheckBusy();

     SendByte(0xfe);            

     return ReceiveByte();

}

 

void Delay(uint MS)

{

     uchar us,usn;

     while(MS!=0)           

      { 

         usn = 2;

         while(usn!=0)

          {

            us = 0xf5;

            while (us!=0)

             {

               us--;

             };

            usn--;

           }

         MS--;

      }

}

 

 

 

void LcmInit( void )

{

     WriteCommand(0x30);      

     WriteCommand(0x03);      

     WriteCommand(0x0C);      

     WriteCommand(0x01);      

     WriteCommand(0x06);      

}

 

void LcmClearTXT( void )

{

     uchar i;

     WriteCommand(0x30);     

     WriteCommand(0x80);      

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

     WriteData(0x20);

}

 

 

void PutStr(uchar row,uchar col,uchar *puts)

{

     WriteCommand(0x30);     

     WriteCommand(AC_TABLE[8*row+col]);   

     while(*puts != '\0')      

     {

           if(col==8)           

           {            

                 col='0';

                 row++;

           }

           if(row==4) row='0';     

           WriteCommand(AC_TABLE[8*row+col]);

           WriteData(*puts);      

           puts++;

           WriteData(*puts);

           puts++;

           col++;

     }

}

 

 

void DisplayDots(uchar DotByte)

{

     uchar i,j;

     WriteCommand(0x34);     

     WriteCommand(0x36);     

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

     {

           WriteCommand(0x80|i);     

           WriteCommand(0x80);     

           for(j=0;j<32;j++)     

           {            

              WriteData(DotByte);                  

           }

           DotByte=~DotByte;

     }

}

 

void main( void )

{

     Delay(100);     

     LcmInit();

     LcmClearTXT();

     while(1)

     {

        PutStr(0,0,"欢迎光临");

        PutStr(1,0,"Rayu技术分享");

PutStr(2,0,"http://blog.rayu");

        PutStr(3,0,"u.com/");

     }

}

显示效果如下:



关键字:51单片机  三线串行驱动  12864液晶 引用地址:51单片机三线串行驱动12864液晶

上一篇:基于51单片机的LCD1602液晶驱动实现
下一篇:LCD的控制驱动及基与MCU接口的特点

推荐阅读最新更新时间:2024-03-16 16:10

51单片机独立键盘原理
我这按键是机械弹性按键,所以具有弹性,按键在按下和松开的瞬间均伴随有一连串的抖动,键抖动会引起一次按键被误读多次,然后为了保证cpu对键的一次闭合仅作一次处理,所以我们必须去除抖动。去除抖动有2种,硬件消抖和软件消抖。 其中一软件消抖最方便。所以我就以软件消抖为例。 独立按键的原理图和led的原理图如上,8个led的阳极都接了vcc(vcc认为是电源正极,gnd认为是电源负极),所以只需要led的阴极接的p2i(i取值0到7)口输入低电平(即0v)对应的led就可以发亮了. 接下来看看独立按键的原理图,首先K1是和rxd管脚相连的,然后rxd管脚又是和P3^1口连接的,所以可以P3^1口是和k1开关连接的,可以
[单片机]
<font color='red'>51单片机</font>独立键盘原理
基于51单片机的酒精检测仪设计
引言 随着我国经济的蓬勃发展,国民生产总值的不断提高,人均可支配财产也大大增加,汽车拥有量持续增加,与此同时,每年死于交通事故的人数也在持续增加,道路交通安全形势变得十分严峻,多部门都对此高度重视。 在全球范围内,人均酒精消费量从1990年的5.9L增加到2017年的6.5L,未来还将持续增加。而人体血液中积累一定程度的酒精,但未及时分解排出体外时,便会影响大脑和中枢神经,致使神经麻痹,大脑反应滞后,身体不受控制等症状,在处理紧急情况时的反应速度和控制能力会有些许下降,严重者丧失行动能力。而我国的酒文化历史悠久,源远流长,在世界上也是独领风骚,在接待贵宾,亲朋好友相聚,酒水必不可少,随之也带来了一系列社会问题,例如酒后打架、醉酒驾
[单片机]
基于51单片机的光驱激光雕刻机源程序电路图+上位机
根据他人DIY 激光雕刻机 手绘原理图 画得不好勿怪,实验操中 电路原理图如下: 单片机源程序如下: /*z地址定义 50 1=x+,2=x-,3=y+,4=y- 51 前进后退步数高 52 前进后退步数低 53 54/55 字宽 56 57 弱光开关 58/59 激光强度 60 x轴速度 61 y轴速度 62 开始打印0,57 63 暂停 64 停止标志 65 66 左右标记 100开始时灰度图数据 */ #include reg52.h #define uint unsigned int #define uchar unsigned char #define N z //X速度 #define
[单片机]
基于<font color='red'>51单片机</font>的光驱激光雕刻机源程序电路图+上位机
基于51单片机之两键控制LED(调光台灯)实验例程
************************** Copyright(C) CaKe **************************************** =================================================== ==============**版权信息 : CaKen工作室 ============== ==============**文件名 : main.c ============== ==============**作者 : CaKen ============== ============
[单片机]
51单片机基础之定时器中断(二)
TMOD寄存器: 这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作。如图: 代码: #include reg51.h sbit LED=P2^0; typedef unsigned char u8; typedef unsigned int u16; void time1_init(void) { TMOD|=0x10; //TMOD是一个寄存器,用来决定定时器的工作方式,高四位决定定时器1,目前是工作方式1,即16位定时计数。 TH1=0xfc; //定时器高八位 TL1=0x18; //定时器低
[单片机]
<font color='red'>51单片机</font>基础之定时器中断(二)
51单片机连接ESP8266串口WiFi模块
  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   51单片机区别   同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WIN
[单片机]
<font color='red'>51单片机</font>连接ESP8266串口WiFi模块
基于51单片机的红外遥控器设计
引言 人们的生活已经全面迈入了信息化的时代,使用红外遥控的家电种类开始增多,在日常生活中利用红外遥控来控制红外控制的家电种类非常的多,普通的家电就有:电视、DVD机、空调等,这些都是需要红外遥控进行控制的,但一个家电只能由厂家的配置的遥控器进行控制,而且只有对应的红外遥控发出的红外编码才能控制相关的红外家电。 为了探究红外遥控的内在原理并延伸红外遥控技术,本文利用平时所学的单片机原理及应用、传感器技术与应用、模拟电子技术和数字电子技术基础等相关电子专业知识,设计了一款基于STC89C52RC单片机的红外遥控系统。该红外遥控系统能够学习并记忆市场上的家电红外遥控器红外编码信号,可以融合多种红外遥控于一体,从而满足对多种红外遥控设备
[单片机]
基于AT89S51单片机的冲床控制器的设计与应用
本文介绍了一种用Atmel89S51单片机仿真PLC控制的方法,设计适合刚性离合器冲床的控制器,介绍了用光电隔离的输入输出电路的基本构成和工作原理,重点介绍了内部键盘显示电路的设计思想,同时给出了冲床控制的电器原理图。 系统硬件配置以AT89S51单片机为核心。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4Kb ISP(In-system programmable)可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,内置看门狗(WDT)电路。 功能强大的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方
[单片机]
基于AT89S<font color='red'>51单片机</font>的冲床控制器的设计与应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved