找回密码
 立即注册

QQ登录

只需一步,快速开始

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

无字库12864单片机程序(纵向取模,字节倒序)带仿真

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /***********************************************************************
  2.            内容:无字库12864测试程序(纵向取模。字节倒序)
  3. ***********************************************************************/
  4. #include <reg52.h>

  5. #define uint unsigned int
  6. #define uchar unsigned char

  7. #define Disp_On 0x3f         //显示命令
  8. #define Disp_Off 0x3e        //关闭命令
  9. #define Col_Add 0x40        //起始列地址
  10. #define Page_Add 0xb8        //起始页地址
  11. #define Start_Line 0xc0        //起始行地址

  12. #define Lcd_Bus P0                 //MCU P0<---> LCM

  13. sbit RS  = P2^0;                 //RS=1时为数据操作,RS=0时为命令操作
  14. sbit RW  = P2^1;                 //RW=1时为读选通,RW=0时为写选通
  15. sbit E          = P2^2;                 //E下降沿时,数据写入驱动器,E为高电平时,数据被读出
  16. sbit Mcs = P2^3;                 //Master chip E,右半屏-CS2
  17. sbit Scs = P2^4;                 //Slave chip E,左半屏-CS1
  18. sbit RST = P2^5;                 //液晶模块复位控制管脚


  19. char code ce[] =  {
  20.                                                 /*-- 文字: 测 --*/
  21.                                                 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
  22.                                                 0x08, 0x31, 0x86, 0x60, 0x00, 0xFE, 0x02, 0xF2, 0x02, 0xFE, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00,
  23.                                                 0x04, 0xFC, 0x03, 0x00, 0x80, 0x47, 0x30, 0x0F, 0x10, 0x67, 0x00, 0x07, 0x40, 0x80, 0x7F, 0x00
  24.                               };
  25. char code shi[] = {
  26.                                                 /*-- 文字: 试 --*/
  27.                                                 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
  28.                                                 …………限于本文篇幅 余下代码请从51黑下载附件…………
  29.                                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30.                                         };

  31. /*---------------------延时子程序----------------------------*/
  32. void delay(unsigned int t)
  33. {
  34.         unsigned int i, j;
  35.         for (i = 0;i < t;i++)
  36.                 for (j = 0;j < 10;j++)
  37.                 {
  38.                         ;
  39.                 }
  40. }

  41. /*--------------------读忙碌子程序---------------------------*/
  42. void Read_busy()
  43. {
  44.         P0 = 0x00;
  45.         RS = 0;
  46.         RW = 1;
  47.         E = 1;
  48.         while(P0&0x80);
  49.         E = 0;
  50. }
  51. /*--------------------写命令到LCD----------------------------*/
  52. void write_com(unsigned char cmdcode)
  53. {
  54.         Read_busy();                        //每次读写都要判断是否忙碌
  55.         RS = 0;
  56.         RW = 0;

  57.         Lcd_Bus = cmdcode;
  58.         delay(0);
  59.         E = 1;
  60.         delay(0);
  61.         E = 0;
  62. }

  63. /*-------------------写数据到LCD----------------------------*/

  64. void write_data(unsigned char Dispdata)
  65. {
  66.         Read_busy();                        //每次读写都要判断是否忙碌
  67.         RS = 1;
  68.         RW = 0;

  69.         Lcd_Bus = Dispdata;
  70.         delay(0);
  71.         E = 1;
  72.         delay(0);
  73.         E = 0;
  74. }



  75. /*------------------显示边框-------------------------------*/
  76. void frame()
  77. {
  78.         unsigned char i;
  79.         Mcs = 0;                                                                                                 //两个屏幕
  80.         Scs = 0;
  81. /*********************************************************************/       
  82.         write_com(Page_Add + 0);                                                                  //上面横线
  83.         write_com(Col_Add + 0);
  84.         for (i = 0;i < 64;i++) write_data(0x01);
  85. /*********************************************************************/
  86.         write_com(Page_Add + 7);                                                                 //下面横线
  87.         write_com(Col_Add + 0);
  88.         for (i = 0;i < 64;i++) write_data(0x80);
  89. /*********************************************************************/
  90.         for (i = 0;i < 8;i++)
  91.         {
  92.                 Mcs = 0;                                                                                           //右半屏
  93.                 Scs = 1;
  94.                 write_com(Page_Add + i);                                                         //共8页
  95.                 write_com(Col_Add + 63);                                                        //最后一列
  96.                 write_data(0xff);                                                                        //ff表示每页的8行全亮
  97.          
  98.                 Mcs = 1;                                                                                          //左半屏与右半屏类似
  99.                 Scs = 0;
  100.                 write_com(Page_Add + i);
  101.                 write_com(Col_Add + 0);
  102.                 write_data(0xff);
  103.         }
  104. }


  105. /*---------------------------清除内存--------------------------------*/
  106. void Clr_Scr()
  107. {

  108.         unsigned char j, k;
  109.         for (k=0;k<8;k++)
  110.         {
  111.                 Mcs = 1;Scs = 0;delay(10);                                                  //左半屏清屏
  112.                 write_com(Page_Add + k);
  113.                 write_com(Col_Add + 0);
  114.                 for (j = 0;j < 64;j++) write_data(0x00);

  115.                 Mcs = 0;Scs = 1; delay(10);                                                  //右半屏清屏
  116.                 write_com(Page_Add + k);
  117.                 write_com(Col_Add + 0);
  118.                 for (j = 64;j < 128;j++) write_data(0x00);
  119.         }         
  120. }


  121. /*------------------显示12864图片---------------------------*/
  122. void Disp_Img(unsigned char code *img)
  123. {
  124.         unsigned char j, k;
  125.         for (k = 0;k < 8;k++)                                                                          //共8页
  126.         {
  127.                 Mcs = 1;Scs = 0;delay(10);                                                        //左半屏数据
  128.                 write_com(Page_Add + k);
  129.                 write_com(Col_Add + 0);
  130.                 for (j = 0;j < 64;j++) write_data(img[k*128 + j]);        //每半块屏共64列
  131.           
  132.                 Mcs = 0;Scs = 1; delay(10);                                                        //右半屏数据
  133.                 write_com(Page_Add + k);
  134.                 write_com(Col_Add + 0);
  135.                 for (j = 64;j < 128;j++) write_data(img[k*128 + j]);
  136.         }
  137. }

  138. /*-------------------------显示横---------------------------*/
  139. void Disp_H_Line()
  140. {
  141.         unsigned char i, j;
  142.         Mcs = 0;
  143.         Scs = 0;
  144.         write_com(Disp_On);                                                                                //显示开

  145.         write_com(Page_Add);                                                                        //页地址
  146.         write_com(Start_Line);                                                                        //开始行
  147.         write_com(Col_Add);                                                                                //列地址

  148.         for (j = 0;j < 8;j++)                                                                        //共8页,所以循环8次
  149.         {
  150.                 write_com(Page_Add + j);
  151.                 write_com(Col_Add + 0);                                                                //第一列开始
  152.                 write_com(Start_Line+0);                                                        //第一行开始
  153.                 for (i = 0;i < 64;i++)write_data(0x55);                                 //每半屏幕共64列
  154.         }
  155. }


  156. /*------------------------显示列-----------------------------*/
  157. void Disp_V_Line()
  158. {
  159.         unsigned char i, j;
  160.         write_com(Disp_On);                                                                                   //显示开
  161.         write_com(Page_Add);                                                                        //页地址
  162.        
  163. ……………………

  164. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
LCD12864测试程序.rar (75.98 KB, 下载次数: 36)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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