找回密码
 立即注册

QQ登录

只需一步,快速开始

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

带字库12864显示汉字的单片机程序

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3.       
  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. #define LCD_data  P0            
  7. sbit LCD_RS  =  P3^5;            
  8. sbit LCD_RW  =  P3^6;            
  9. sbit LCD_EN  =  P3^4;            
  10. sbit LCD_PSB =  P3^1;            
  11. sbit wela    =  P2^6;
  12. sbit dula    =  P2^7;

  13. uchar code dis1[] = {"输入汉字"};
  14. uchar code dis2[] = {"输入文字"};
  15. uchar code dis3[] = {"输入文字"};
  16. uchar code dis4[] = {"输入汉字"};

  17. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  18. uchar IRDIS[2];
  19. uchar IRCOM[4];
  20. void  dataconv();
  21. void lcd_pos(uchar X,uchar Y);  





  22. void delay(int ms)
  23. {
  24.     while(ms--)
  25.         {
  26.       uchar i;
  27.           for(i=0;i<250;i++)  
  28.            {
  29.             _nop_();                          
  30.                 _nop_();
  31.                 _nop_();
  32.                 _nop_();
  33.            }
  34.         }
  35. }               






  36. bit lcd_busy()
  37. {                          
  38.     bit result;
  39.     LCD_RS = 0;
  40.     LCD_RW = 1;
  41.     LCD_EN = 1;
  42.     delayNOP();
  43.     result = (bit)(P0&0x80);
  44.     LCD_EN = 0;
  45.     return(result);
  46. }






  47. void lcd_wcmd(uchar cmd)
  48. {                          
  49.    while(lcd_busy());
  50.     LCD_RS = 0;
  51.     LCD_RW = 0;
  52.     LCD_EN = 0;
  53.     _nop_();
  54.     _nop_();
  55.     P0 = cmd;
  56.     delayNOP();
  57.     LCD_EN = 1;
  58.     delayNOP();
  59.     LCD_EN = 0;  
  60. }






  61. void lcd_wdat(uchar dat)
  62. {                          
  63.    while(lcd_busy());
  64.     LCD_RS = 1;
  65.     LCD_RW = 0;
  66.     LCD_EN = 0;
  67.     P0 = dat;
  68.     delayNOP();
  69.     LCD_EN = 1;
  70.     delayNOP();
  71.     LCD_EN = 0;
  72. }





  73. void lcd_init()
  74. {

  75.     LCD_PSB = 1;         

  76.     lcd_wcmd(0x34);      
  77.     delay(5);
  78.     lcd_wcmd(0x30);      
  79.     delay(5);
  80.     lcd_wcmd(0x0C);      
  81.     delay(5);
  82.     lcd_wcmd(0x01);      
  83.     delay(5);
  84. }





  85.   main()
  86. {
  87.     uchar i;
  88.     delay(10);                 
  89.     wela=0;
  90.         dula=0;
  91.     lcd_init();               

  92.     lcd_pos(0,0);            
  93.      i = 0;

  94.         delay(100);

  95.     while(dis1[i] != '\0')
  96.      {                        
  97.        lcd_wdat(dis1[i]);
  98.        i++;
  99.      }
  100.         delay(200);      

  101.     lcd_pos(1,0);            
  102.      i = 0;
  103.     while(dis2[i] != '\0')
  104.      {
  105.        lcd_wdat(dis2[i]);      
  106.        i++;
  107.      }
  108.          delay(200);

  109.          lcd_pos(2,0);            
  110.      i = 0;
  111.     while(dis3[i] != '\0')
  112.      {
  113.        lcd_wdat(dis3[i]);      
  114.        i++;
  115.      }
  116.          delay(200);

  117.          lcd_pos(3,0);            
  118.      i = 0;
  119.     while(dis4[i] != '\0')
  120.      {
  121.        lcd_wdat(dis4[i]);      
  122.        i++;
  123.      }
  124.      while(1);
  125. }





  126. void lcd_pos(uchar X,uchar Y)
  127. {                          
  128.    uchar  pos;
  129.    if (X==0)
  130.      {X=0x80;}
  131.    else if (X==1)
  132.      {X=0x90;}
  133.    else if (X==2)
  134.      {X=0x88;}
  135.    else if (X==3)
  136.      {X=0x98;}
  137.    pos = X+Y ;  
  138.    lcd_wcmd(pos);     
  139. }
复制代码



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

使用道具 举报

沙发
ID:375250 发表于 2018-10-12 22:35 | 只看该作者
能不要能发下开发板的原理图
回复

使用道具 举报

板凳
ID:497598 发表于 2019-12-30 16:01 | 只看该作者
请问有仿真吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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