找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2821|回复: 0
收起左侧

单片机学习笔记(九)液晶字幕显示

[复制链接]
ID:108531 发表于 2016-3-12 16:46 | 显示全部楼层 |阅读模式
本帖最后由 51hei人人 于 2016-3-12 16:47 编辑

                                                                                               


  1. LCD显示 第一行显示 welcome 第二行显示 www.baidu.com

  2. C语言源程序:

  3. #include <reg52.h> //52单片机头文件包含

  4. #include <intrins.h> //包换一些汇编指令的头文件

  5. typedef unsigned char BYTE;//定义BYTE  为 unsigned char  型

  6. typedef unsigned int WORD;//定义WORD 为 unsigned int  型

  7. typedef bit BOOL;//定义BOOL 为 bit 型

  8. sbit rs=P1^0;//定义rs 为P1端口的第0位

  9. sbit rw=P1^1;//定义rw为P1端口的第1位

  10. sbit ep=P1^2;//定义ep为P1端口的第2位

  11. BYTE code dis1[]={"welcome"};//定义第一行要显示的字符数组

  12. BYTE code dis2[]={"www.baidu.com"};//定义第二行要显示的字符数组

  13. delay(BYTE ms) //延时函数

  14. {

  15.     BYTE i; //定义字节型变量i

  16.     while(ms--)//每循环一次将ms的值减1

  17.     {

  18.         for(i=0;i<250;i++)//for循环 循环250次

  19.         {

  20.             _nop_();//NOP语句

  21.             _nop_();//NOP语句

  22.             _nop_();//NOP语句

  23.             _nop_();//NOP语句

  24.         }

  25.     }

  26. }

  27. BOOL lcd_bz()   //LCD忙碌状态检测函数

  28. {

  29.     BOOL result; //定义结果位变量 result;

  30.     rs=0;    //P0第一位给0

  31.     rw=1;    //P0第二位给1

  32.     ep=1;    //P0第三位给1

  33.     _nop_();    //空语句用于延时

  34.     _nop_();    //空语句用于延时

  35.     _nop_();    //空语句用于延时

  36.     _nop_();    //空语句用于延时

  37.     result=(BOOL)(P0 & 0x80)    //将P0与0x80相与 结果转换成BOOL型赋值给result

  38.     ep=0;//第三位给0

  39.     return result;//返回结果

  40. }

  41. lcd_wcmd(BYTE cmd)    //指令写入函数

  42. {

  43.     whiel(lcd_bz()); //测试lcd是否忙碌

  44.     rs=0;rw=0;ep=0;//功能位选择

  45.     _nop_();_nop_();//延时

  46.     P0=cmd;    //写入指令

  47.     _nop_();_nop_();//延时

  48.     _nop_();_nop_();//延时

  49.     ep=1;//ep给1

  50.     _nop_();_nop_();//延时

  51.     _nop_();_nop_();//延时

  52.     ep=0;//ep给0

  53. }

  54. lcd_pos(BYTE pos)    //显示位置设定函数

  55. {

  56.     lcd_wcmd(pos | 0x80); //将pos和0x80相或作为参数传给lcd_wcmd

  57. }

  58. lcd_wdat(BYTE dat)    //字符写入函数

  59. {

  60.     while(lcd_bz());//测试lcd是否忙碌

  61.     rs=1;rw=0;ep=0;//功能位选择

  62.     P0=dat;//写入字符

  63.     _nop_();_nop_();//延时

  64.     _nop_();_nop_();//延时

  65.     ep=1;//ep给1

  66.     _nop_();_nop_();//延时

  67.     _nop_();_nop_();//延时

  68.     ep=0;//ep给0

  69. }

  70. lcd_init() //LCD初始化函数

  71. {

  72.     lcd_wcmd(0x38);

  73.     delay(1); //延时

  74.     lcd_wcmd(0x0c);

  75.     delay(1);//延时

  76.     lcd_wcmd(0x06);

  77.     delay(1);//延时

  78.     lcd_wcmd(0x01); //清除LCD的显示内容

  79.     delay(1);

  80. }

  81. main()

  82. {

  83.     BYTE i;//定义BYTE变量i

  84.     lcd_init(); //初始化LCD

  85.     delay(10);//延时

  86.     lcd_pos(4); //设置显示位置为第一行的第5个字符

  87.     i=0;//i赋值为0

  88.     while(dis1[i]!='\0')//判断是否到了字符串结尾

  89.     {

  90.         lcd_wdat(dis1[i]);//循环将字符写入

  91.         i++;i自加指向下个字符

  92.     }

  93.     lcd_pos(0x40); //设置显示位置为第二行第一个字符

  94.     i=0;//i赋值为0

  95.     while(dis2[i]!='\0') //判断是否到字符串结尾

  96.     {

  97.         lcd_wdat(dis2[i]);//循环将字符写入

  98.         i++;i自加指向下个字符

  99.     }

  100.     whiel(i); //无限循环

  101. }

  102. //实验结果 液晶屏第一行显示welcome 第二行显示www.baidu.com
复制代码




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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