找回密码
 立即注册

QQ登录

只需一步,快速开始

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

lcd2684程序 st7920字库液晶显示

[复制链接]
跳转到指定楼层
楼主
ID:217939 发表于 2017-7-7 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*-----------------------------------------------
  2.   名称:st7920字库液晶显示
  3.   论坛:806899919
  4.   编写:光汇科技
  5.   日期:2012.3
  6.   修改:无
  7.   内容:通过显示字符、数字、汉字和图片测试液晶基本功能
  8. ------------------------------------------------*/
  9. #include <reg52.h>
  10. #include "delay.h"

  11. sbit RS = P2^2;
  12. sbit RW = P2^1;
  13. sbit E  = P2^0;
  14. sbit RES = P2^5;
  15. sbit PSB = P2^3;

  16. #define DataPort P0        //MCU P0<------> LCM


  17. /*
  18. unsigned char code user16x16[]={ //笑脸图片
  19. 0x0F,0xF0,0x10,0x08,0x20,0x04,0x40,0x02,0x9C,0x39,0xBE,0x7D,0x80,0x01,0x80,0x01,
  20. 0x80,0x01,0x88,0x11,0x84,0x21,0x43,0xC2,0x20,0x04,0x10,0x08,0x0F,0xF0,0x00,0x00,
  21. };
  22.    */
  23. /*------------------------------------------------
  24.                     检测忙位
  25. ------------------------------------------------*/
  26. void Check_Busy()
  27. {  
  28.     RS=0;
  29.     RW=1;
  30.     E=1;
  31.     DataPort=0xff;
  32.     while((DataPort&0x80)==0x80);//忙则等待
  33.     E=0;
  34. }
  35. /*------------------------------------------------
  36.                    写命令
  37. ------------------------------------------------*/
  38. void Write_Cmd(unsigned char Cmd)
  39. {
  40.         Check_Busy();
  41.         RS=0;
  42.         RW=0;
  43.         E=1;
  44.         DataPort=Cmd;
  45.         DelayUs2x(5);
  46.         E=0;
  47.         DelayUs2x(5);
  48. }
  49. /*------------------------------------------------
  50.                     写数据
  51. ------------------------------------------------*/
  52. void Write_Data(unsigned char Data)
  53. {
  54.         Check_Busy();
  55.         RS=1;
  56.         RW=0;
  57.         E=1;
  58.         DataPort=Data;
  59.         DelayUs2x(5);
  60.         E=0;
  61.         DelayUs2x(5);
  62. }
  63. /*------------------------------------------------
  64.                    液晶屏初始化
  65. ------------------------------------------------*/
  66. void Init_ST7920()
  67. {  
  68.    DelayMs(40);           //大于40MS的延时程序
  69.    PSB=1;                 //设置为8BIT并口工作模式
  70.    DelayMs(1);            //延时
  71.    RES=0;                 //复位
  72.    DelayMs(1);            //延时
  73.    RES=1;                 //复位置高
  74.    DelayMs(10);
  75.    Write_Cmd(0x30);       //选择基本指令集
  76.    DelayUs2x(50);         //延时大于100us
  77.    Write_Cmd(0x30);       //选择8bit数据流
  78.    DelayUs2x(20);         //延时大于37us
  79.    Write_Cmd(0x0c);       //开显示(无游标、不反白)
  80.    DelayUs2x(50);         //延时大于100us
  81.    Write_Cmd(0x01);       //清除显示,并且设定地址指针为00H
  82.    DelayMs(15);           //延时大于10ms
  83.    Write_Cmd(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
  84.    DelayUs2x(50);         //延时大于100us
  85. }
  86. /*------------------------------------------------
  87.                    用户自定义字符
  88. ------------------------------------------------
  89. void CGRAM()
  90. {
  91.      int i;
  92.      Write_Cmd(0x30);
  93.      Write_Cmd(0x40);
  94.      for(i=0;i<16;i++)
  95.        {
  96.             Write_Data(user16x16[i*2]);
  97.         Write_Data(user16x16[i*2+1]);
  98.       }
  99. }                                   */
  100. /*------------------------------------------------
  101.                    显示用户自定义字符
  102. ------------------------------------------------
  103. void DisplayCGRAM(unsigned char x,unsigned char y)
  104. {                                                                                                                                                                                          
  105. switch(y)
  106.      {
  107.           case 1: Write_Cmd(0x80+x);break;
  108.           case 2: Write_Cmd(0x90+x);break;
  109.           case 3: Write_Cmd(0x88+x);break;
  110.           case 4: Write_Cmd(0x98+x);break;
  111.       default:break;
  112.          }
  113.     Write_Data(00);
  114.     Write_Data(00);

  115. }                                         */
  116. /*------------------------------------------------
  117.                    显示字符串
  118. x:横坐标值,范围0~8
  119. y:纵坐标值,范围1~4
  120. ------------------------------------------------*/
  121. void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s)
  122. {
  123. switch(y)
  124.      {
  125.           case 1: Write_Cmd(0x80+x);break;
  126.           case 2: Write_Cmd(0x90+x);break;
  127.           case 3: Write_Cmd(0x88+x);break;
  128.           case 4: Write_Cmd(0x98+x);break;
  129.       default:break;
  130.          }
  131. while(*s>0)
  132.    {
  133.       Write_Data(*s);
  134.       s++;
  135.       DelayUs2x(50);
  136.    }
  137. }
  138. /*------------------------------------------------
  139.                       清屏
  140. ------------------------------------------------*/
  141. void ClrScreen()
  142. {
  143.    Write_Cmd(0x01);
  144.    DelayMs(15);
  145. }
  146.            
  147. /*------------------------------------------------
  148.                    显示图片
  149. ------------------------------------------------*/
  150. void LCD_PutGraphic(unsigned char code *img)
  151. {
  152. int i,j;
  153. //显示上半屏内容设置
  154.    for(i=0;i<32;i++)            
  155.     {
  156.       Write_Cmd(0x80 + i); //SET  垂直地址 VERTICAL ADD
  157.       Write_Cmd(0x80);     //SET  水平地址 HORIZONTAL ADD
  158.       for(j=0;j<16;j++)
  159.        {
  160.          Write_Data(*img);
  161.          img++;
  162.        }
  163.     }
  164. //显示下半屏内容设置
  165.    for(i=0;i<32;i++)            
  166.     {
  167.       Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
  168.       Write_Cmd(0x88);     //SET 水平地址 HORIZONTAL ADD
  169.       for(j=0;j<16;j++)
  170.        {
  171.          Write_Data(*img);
  172.          img++;
  173.        }
  174.     }  

  175. }
  176. /*------------------------------------------------
  177.                  设置到绘图模式
  178. ------------------------------------------------*/
  179. void SetGraphicMode()
  180. {
  181.    Write_Cmd(0x36);       //选择8bit数据流 图形模式
  182.    DelayUs2x(20);

  183. }
  184. void display_init()
  185. {
  186.           LCD_PutString(0,1,"智能家居控制系统");
  187.           LCD_PutString(0,2,"学生:郑家波");         
  188.           LCD_PutString(0,3,"老师:李湘文");
  189.       LCD_PutString(0,4,"时间:2015/6/2");   
  190. }

  191. /*------------------------------------------------
  192.                  主程序
  193. ------------------------------------------------
  194. main()
  195. {
  196.   unsigned char i;
  197.   // CGRAM();     //写入自定义字符


  198.     Init_ST7920();   //初始化
  199.         LCD_PutString(0,1,"智能家居控制系统");
  200.           LCD_PutString(0,2,"学生:郑家波");         
  201.           LCD_PutString(0,3,"老师:李湘文");
  202.       LCD_PutString(0,4,"时间:2015/5/5");   
  203.           //延时30x200ms   
  204.       for(i=0;i<30;i++)
  205.           DelayMs(200);
  206.            ClrScreen();
  207.                     while(1)
  208.    {
  209.           LCD_PutString(0,1,"窗帘OFF 灯光OFF");
  210.           LCD_PutString(0,2,"烟雾OK  温度OK ");
  211.           LCD_PutString(0,3,"  温度:28°C");
  212.       LCD_PutString(0,4,"  光照度:53% ");   
  213.           //延时30x200ms   
  214.       for(i=0;i<30;i++)
  215.           DelayMs(200);
  216.                   LCD_PutString(0,1,"窗帘ON  灯光OFF");
  217.                   for(i=0;i<30;i++)
  218.           DelayMs(200);
  219.           ClrScreen();
  220.           LCD_PutString(0,2,"  短信通知中...");        //"正”字显示不出
  221.             for(i=0;i<20;i++)
  222.           DelayMs(200);
  223.            


  224.    }
  225. }
  226.                                                   */


复制代码

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:4882 发表于 2018-1-16 19:46 | 只看该作者
有没有试过,能亮吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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