找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机1602显示实验

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit rs=P2^0;
  6. sbit rw=P2^1;
  7. sbit ep=P2^2;
  8. uchar code dis1[]={"5446554446"};
  9. uchar code dis2[]={"7799553221"};
  10. void delay(uchar ms)
  11. {
  12.         uchar i;
  13.         while(ms--)
  14.                 for(i=0;i<120;i++);
  15. }
  16. uchar Busy_Check(void)          //测试LCD忙碌状态
  17. {
  18.         uchar LCD_Status;
  19.         rs=0;
  20.         rw=1;
  21.         ep=1;
  22.         _nop_();
  23.         _nop_();
  24.         _nop_();
  25.         _nop_();
  26.         LCD_Status=P0&0x80;
  27.         ep=0;
  28.         return LCD_Status;
  29. }
  30. void lcd_wcmd(uchar cmd)  //写入指令数据到LCD
  31. {
  32.         while(Busy_Check());  //等待LCD空闲
  33.         rs=0;
  34.         rw=0;
  35.         ep=0;
  36.         _nop_();
  37.         _nop_();
  38.         P0=cmd;
  39.         _nop_();
  40.         _nop_();
  41.         _nop_();
  42.         _nop_();
  43.         ep=1;
  44.         _nop_();
  45.         _nop_();
  46.         _nop_();
  47.         _nop_();
  48.         ep=0;
  49. }
  50. void lcd_pos(uchar pos)          //设定显示位置
  51. {
  52.         lcd_wcmd(pos|0x80);          //设置LCD当前光标的位置
  53. }
  54. void lcd_wdat(uchar dat)  //写入字符显示数据到LCD
  55. {
  56.         while(Busy_Check());  //等待LCD空闲
  57.         rs=1;
  58.         rw=0;
  59.         ep=0;
  60.         P0=dat;
  61.         _nop_();
  62.         _nop_();
  63.         _nop_();
  64.         _nop_();
  65.         ep=1;
  66.         _nop_();
  67.         _nop_();
  68.         _nop_();
  69.         _nop_();
  70.         ep=0;
  71. }
  72. void LCD_disp(void)
  73. {
  74.         uchar i;
  75.         lcd_pos(1);                          //设置显示位置为第1行的第2个字符
  76.         i=0;
  77.         while(dis1[i]!='\0')
  78.         {
  79.                 lcd_wdat(dis1[i]);//在第1行显示字符串
  80.                 i++;
  81.         }
  82.         lcd_pos(0x41);                  //设置显示位置为第2行第2个字符
  83.         i=0;
  84.         while(dis2[i]!='\0')
  85.         {
  86.                 lcd_wdat(dis2[i]);//在第2行显示字符串
  87.                 i++;
  88.         }
  89. }
  90. void lcd_init(void)                  //LCD初始化
  91. {
  92.         lcd_wcmd(0x38);                  //设置显示格式为16*2行显示,5*7点阵,8位数据接口
  93.         delay(1);
  94.         lcd_wcmd(0x0f);                  //0x0f--显示开关设置,显示光标并闪烁
  95.         delay(1);
  96.         lcd_wcmd(0x06);                  //0x06--读写后指针加1
  97.         delay(1);
  98.         lcd_wcmd(0x01);                  //清除LCD的内容
  99.         delay(1);
  100. }
  101. void main(void)
  102. {
  103.         lcd_init();                          //初始化LCD
  104.         delay(10);
  105.         LCD_disp();
  106.         while(1);
  107. }
复制代码




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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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