找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2745|回复: 0
打印 上一主题 下一主题
收起左侧

LCD12864液晶显示PPT课件与单片机源码下载

[复制链接]
跳转到指定楼层
楼主
LCD12864液晶显示以51单片机为核心设计一个LCD12864液晶显示器。具有简单的文字和图案花样显示功能。

系统主要由51单片机进行控制各个电路的配合,从而完成简单的花样显示文字和图案的功能。
电路主要包括:
单片机最小系统电路,ST7920控制电路,LCD12864液晶显示等电路。

点阵图形液晶
字库:带中文字库、不带中文字库
数据接口:串口、并口
LCD12864:指128列,64行点阵的液晶屏,可以显示32个汉字(16*16的点阵),4行,每行8个汉字)

PPT课件内容预览:


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


数字0亮 ,数字1灭
cs1 打开显示
RW:读/写
RS数据/指令
E:使能,下降沿数据写入控制器内寄存器
cs1=0.,左半屏;cs2=0,右半屏

e(sclk时钟引脚);RS(cs,打开显示);rw(sid数据引脚),括号中为串行含义

单片机源程序如下:
  1. /*
  2. 液晶12864字符显示,DDRAM编码书写,
  3. 就是先写页地址,页地址共8页,例如第2页
  4. write_comm(0xba); //,页地址格式1011 1???
  5. 然后列地址,列地址共64列,例如第5页
  6.   write_comm(0x40); //DDRAM的列地址01??????
  7. */
  8.   #include "reg51.h"
  9.   sbit cs1_zuo=P3^3;
  10.   sbit cs2_you=P3^4;
  11.   sbit enable_12864=P3^5;         //允许
  12.   sbit  read_write=P3^6;          //数据引脚
  13.   sbit command_date=P3^7;//

  14.   void delayms(int t)
  15.   {int i,j;
  16.   for(i=0;i<t;i++)
  17.    for(j=0;j<120;j++);
  18.   
  19.   }
  20.   void chech_busy()
  21.   {           //unsigned char timeout=200;
  22.         unsigned char busy;
  23.              enable_12864=0;
  24.           read_write=1;          // 读写引脚  1/0
  25.           command_date=0;  //命令/数据引脚 1/0
  26.           P2=0xff;//读入前先置1
  27.                    enable_12864=1;
  28.                    while(0x80&busy);  //最高位为1就忙,不能接收,等待
  29.            enable_12864=0;
  30.   }
  31.   
  32.   unsigned char read_date()//实际读状态寄存器
  33.   {unsigned char dat;
  34.    chech_busy();//每次读写之前进行忙检测
  35.         enable_12864=0;
  36.         command_date=1;       
  37.         read_write=1;
  38.         P2=0xff;//准备读入       
  39.         enable_12864=1;   //enable_12864的高电平读数据
  40.         dat=P2;
  41.         delayms(2);//延时
  42.         enable_12864=0;
  43.     return dat;
  44.   }
  45. void write_date(unsigned char dat)
  46.   {          chech_busy();//每次读写之前进行忙检测
  47.         command_date=1;        //写数据RS引脚高电平
  48.          read_write=0;
  49.         P2=dat;
  50.          delayms(2);        //延时50us
  51.         enable_12864=1;  //e的下降沿写入
  52.         delayms(2);        //延时50us
  53.         enable_12864=0;
  54.   
  55.   }
  56.   //
  57.   void write_comm(unsigned char comm)
  58.   {        chech_busy();//每次读写之前进行忙检测
  59.      command_date=0;  //写命令RS引脚低电平
  60.         read_write=0;
  61.            P2=comm;
  62.                   delayms(2);
  63.                 enable_12864=1;  //e的下降沿写入
  64.                 delayms(2);
  65.                 enable_12864=0;
  66.   }
  67.   /*******初始化**************/
  68.   void init_lcd()
  69.   {         delayms(100);
  70.              write_comm(0x30);//8位数据,基本指令集
  71.            write_comm(0x0c);//显示打开,光标关、反白关
  72.            write_comm(0x01);//清屏,DDRAM填满0x20,且地址计数器清0
  73.          
  74.            delayms(100);
  75.   }


  76. void main()

  77. {unsigned char code  tuan[]=
  78.           //阳码(0点亮)逐列,逆向
  79.         {
  80. //        0xFF,0xF7,0xFD,0xF7,0xFD,0xF7,0x0D,0xF7, //马
  81. //        0x7D,0xF7,0x7D,0xF7,0x7D,0xF7,0x7D,0xF7,
  82. //        0x7D,0xF7,0x7D,0xF7,0x01,0xB7,0x7F,0x7F,
  83. //        0x7F,0xBF,0x7F,0xC0,0xFF,0xFF,0xFF,0xFF
  84. 0xDF,0xDD,0xCF,0x98,0x53,0xDD,0x9C,0xED,0xDF,0xED,0xE7,0x6D,0xF7,0xBF,0xF7,0xCF,
  85. 0x07,0xF0,0x76,0xFF,0x71,0xBF,0x77,0x7F,0x77,0xBF,0x77,0xC0,0xF7,0xFF,0xFF,0xFF,/*"纺",0*/

  86. 0xDF,0xDD,0xCF,0x98,0x53,0xDD,0x9C,0xED,0xDF,0xED,0xE7,0x6D,0xFF,0xBF,0x03,0xDC,
  87. 0xFB,0xE6,0xFB,0xFE,0xFB,0xFE,0xFB,0xF6,0xFB,0xEE,0x03,0xDC,0xFF,0x3F,0xFF,0xFF,/*"织",1*/

  88. 0xFD,0xF7,0xFD,0xE7,0x01,0xF0,0x6D,0xF7,0x6D,0xFB,0x01,0x00,0xFD,0xFB,0xFD,0x7F,
  89. 0x03,0x9C,0xFB,0xE6,0xFB,0xFE,0xFB,0xFE,0xFB,0xF6,0x03,0xCC,0xFF,0x3F,0xFF,0xFF,/*"职",2*/

  90. 0xFF,0xBF,0xEF,0xBF,0x9F,0xBF,0x7F,0xBC,0xFF,0xBF,0x00,0x80,0xFF,0xBF,0xFF,0xBF,
  91. 0xFF,0xBF,0x00,0x80,0xFF,0xBD,0xFF,0xBE,0x3F,0xBF,0xCF,0xBF,0xFF,0xBF,0xFF,0xFF,
  92. 0xFF,0xFF,0x8F,0xCF,0xF7,0xD7,0xF7,0xDB,0xF7,0xDD,0x77,0xDE,0x8F,0xCF,0xFF,0xFF,/*"2",0*/

  93. 0xFF,0xFF,0x1F,0xF0,0xEF,0xEF,0xF7,0xDF,0xF7,0xDF,0xEF,0xEF,0x1F,0xF0,0xFF,0xFF,/*"0",1*/

  94. 0xFF,0xFF,0xEF,0xDF,0xEF,0xDF,0x07,0xC0,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,/*"1",2*/

  95. 0xFF,0xFF,0x8F,0xE3,0x77,0xDD,0xF7,0xDE,0xF7,0xDE,0x77,0xDD,0x8F,0xE3,0xFF,0xFF/*"8",3*/
  96.     };


  97. int i,j,t,x=0x80,y=0x80; //x,y为点阵的坐标0x80
  98. delayms(20);
  99.   init_lcd();
  100. //硬件上左屏开了显示了
  101.   write_comm(0x01);//清屏
  102.   delayms(40);
  103.    cs1_zuo=0; //写左屏
  104.    cs2_you=1;
  105.    write_comm(0xb8+0); //页地址0页1011 1???
  106.    write_comm(0x40); //DDRAM的列地址40~7f,64列
  107.   
  108.             for(i=0;i<64;i++)
  109.                    write_date(tuan[2*i]);
  110.       
  111.         write_comm(0xb8+1);//页地址1页1011 1???
  112.     write_comm(0x40);//DDRAM的列地址40~7f,64列
  113.                            //列地址设定后,列地址自动加1
  114.                            //页地址重设起作用,设定后保持
  115.      for(i=0;i<64;i++)
  116.           write_date(tuan[2*i+1]);
  117.       cs1_zuo=1; //写右屏
  118.    cs2_you=0;
  119.          write_comm(0xb8+2); //页地址3页1011 1???
  120.    write_comm(0x40+32); //DDRAM的列地址40~7f,64列
  121.   
  122.             for(i=64;i<96;i++)
  123.                    write_date(tuan[2*i]);

  124.          write_comm(0xb8+3); //页地址4页1011 1???
  125.    write_comm(0x40+32); //DDRAM的列地址40~7f,64列
  126.   
  127.             for(i=64;i<96;i++)
  128.                    write_date(tuan[2*i+1]);
  129.    while(1);
  130. }
复制代码

所有资料51hei提供下载:
参考资料.zip (8.98 MB, 下载次数: 42)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表