找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LMB162字符系列 基于AT89S52单片机的源代码-拓普微LCM

[复制链接]
跳转到指定楼层
楼主
ID:46918 发表于 2020-3-2 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还记得那个protus里面经典的LCD 1602不?想当年折腾了好久才点亮他;
为了让大家方便点亮,把源码贡献出来,只要按照程序设置的IO口配置好原理图,
然后用keil编译产生hex文件,再把hex文件装在在protus的单片机里,就可以点亮了,
.c源码附上,动动手指你们也可以的!

有啥疑问可以写在回复区,有空了大家可以探讨一下。

单片机源程序如下:
  1. #include <stdio.h>
  2. #include <reg52.h>
  3. #include <intrins.h>

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

  6. #define  LCDBUS P1
  7. sbit LCD_RS =P3^1;
  8. sbit LCD_RW =P3^7;
  9. sbit LCD_E  =P3^2;


  10. //-----------------------------------
  11. // dispaly data
  12. //-----------------------------------
  13. uchar code Logo1[]=
  14. {
  15. "TOPWAY  Char LCDM                       "
  16. "1234567890123456789012345678901234567890"
  17. };


  18. //-----------------------------------
  19. // Delay Routine
  20. //-----------------------------------
  21. void delayus(uint u)                        //delay routine
  22. {
  23.         uint i;
  24.         for(i=0;i<=u;i++)
  25.         {
  26.         _nop_();_nop_();
  27.         }
  28. }

  29. void delayms(uint m)
  30. {
  31.         uint j;
  32.         uint i;
  33.        
  34.         for(i=0; i<m; i++)
  35.             for(j=0; j<250; j++)
  36.                 _nop_();
  37. }

  38. //-----------------------------------
  39. // IO Routine
  40. //-----------------------------------
  41. void SdCmd(uchar command)                //send command
  42. {
  43.     LCD_E=0;
  44.     LCD_RW=0;
  45.     LCD_RS=0;
  46.     LCDBUS=command;
  47.     LCD_E=1;
  48.     _nop_();
  49.     _nop_();
  50.     _nop_();
  51.     LCD_E=0;
  52.     delayus(50);
  53. }

  54. void SdData(uchar DData)                //send data
  55. {
  56.     LCD_E=0;
  57.     LCD_RW=0;
  58.     LCD_RS=1;
  59.     LCDBUS=DData;
  60.     LCD_E=1;
  61.     _nop_();
  62.     _nop_();
  63.     _nop_();
  64.     LCD_E=0;
  65.     _nop_();
  66.     _nop_();
  67.     _nop_();
  68. }


  69. //-----------------------------------
  70. // Send a page of Display Data
  71. //-----------------------------------
  72. void SdPage(uchar *DisplayDataPtr)  // fill up a 40x2 DDRAM area
  73. {
  74.         uchar TempData;
  75.         uint i;

  76.         SdCmd(0x80);        // Set DDRAM Add ptr to 00h, 1st line
  77.         for(i=0;i<40;i++)
  78.         {
  79.              TempData=(*(DisplayDataPtr+i));
  80.                 SdData(TempData);
  81.         }
  82.         SdCmd(0xC0);        // Set DDRAM Add ptr to 40h, 2nd line
  83.         for(i=0;i<40;i++)
  84.         {
  85.              TempData=(*(DisplayDataPtr+i+40));
  86.         SdData(TempData);
  87.         }
  88. }

  89. //-----------------------------------
  90. // init
  91. //-----------------------------------
  92. void LCD_init()
  93. {
  94.         SdCmd(0x38);        //8bit I/F;2-linedisplay;5x8 font
  95.         SdCmd(0x04);        //No screen shifting
  96.         SdCmd(0x0c);        //Display on;cursor off;cursor-blinking off
  97.         SdCmd(0x01);    //clear screen
  98.         delayms(2);        //clear screen command takes more time
  99. }

  100. //-----------------------------------
  101. // Main Program
  102. //-----------------------------------
  103. void main()
  104. {
  105.           LCD_E=0;
  106.         LCD_RW=0;
  107.         LCD_RS=0;
  108.         LCDBUS=0x00;
  109.         SP=0x60;
  110.         EA = 0;                // disable interrupts
  111.         delayms(10);        // wait for LCD module power on reset

  112.         LCD_init();

  113.         SdPage(Logo1);

  114.         while(1);        //end of program
  115. }
复制代码

所有资料51hei提供下载:
51单片机字符显示源码.rar (1019 Bytes, 下载次数: 8)



评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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