找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机8位总线驱动LCD1602

[复制链接]
跳转到指定楼层
楼主
ID:259435 发表于 2017-12-9 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*8位总线驱动LCD1602*/

  2.     #include<reg52.h>

  3.     #defineuchar unsigned char

  4.     #defineuint unsigned int

  5.     #include<intrins.h>//延时时钟周期时用到

  6.     sbitweixuan=P2^7;     //将两个锁存器关闭,防止数码管显示乱码

  7.     sbitduanxuan=P2^6;

  8.     //sbitLCD_RW=P2^7;  //检查忙位

  9.     sbitLCD_RS=P3^5;

  10.     sbitLCD_EN=P3^4;

  11.     ucharcode table[]="123456789ABCDEFG";

  12.     ucharcode table1[]="123456789ABCDEFG";

  13.     voiddelayxms(uint xms)    //延时X毫秒

  14.     {   

  15.         uinti,j;

  16.        for(i=0;i<xms;i++)

  17.            for(j=0;j<114;j++);

  18.     }   

  19. /*  voidread_LCD_busy() //检查忙函数

  20.     {

  21.        LCD_RS=0;

  22.        LCD_RW=1;

  23.        IO7=1;  //I/O口写1

  24.        LCD_EN=1;

  25.        while(IO7);    //等待液晶写完

  26.        LCD_EN=0;

  27.     }      */

  28.     voiddelayxus(uint xus)  //延时X微秒

  29.     {   

  30.        uchari;

  31.        for(i=0;i<xus;i++)

  32.        {

  33.            _nop_();

  34.        }

  35.     }

  36.     voidwrite_LCD_CD(uchar cd,uchar CD)  //cd=0写指令,cd=1写数据

  37.     {

  38.        //read_LCD_busy();//检查忙函数

  39.         delayxus(20);//最低延时(一定要在开头有个延时)

  40.        LCD_RS=cd;

  41.        P0=CD;

  42.        LCD_EN=1;            

  43.        LCD_EN=0;

  44.     }

  45.     voidLCD_init()    //initialization,液晶初始化

  46.     {

  47.        write_LCD_CD(0,0x38);    //显示模式设置(16*2显示,5*7点阵,4位数据接口)

  48.        write_LCD_CD(0,0x06);   // 写一个字符后地址指针加1

  49.        write_LCD_CD(0,0x0c);    //设置开显示,不显示光标

  50.        write_LCD_CD(0,0x01);    //显示清屏,数据指针清0(清屏需要一定时间)

  51.        delayxus(80);//清屏时间

  52.     }

  53.     voidmain()

  54.     {

  55.        uchari;

  56.        duanxuan=0;

  57.        weixuan=0;

  58.        LCD_EN=0;

  59.        LCD_init();

  60.        write_LCD_CD(0,0x80);//数据地址指针,第一行

  61.        do

  62.        {

  63.            write_LCD_CD(1,table[ i]);  //写数据,data是编译器关键词

  64.            i++;

  65.        }

  66.        while(table[ i]!='\0');

  67.        i=0;

  68.        write_LCD_CD(0,0x80+0x40);//数据地址指针,第二行

  69.        do

  70.        {

  71.            write_LCD_CD(1,table1[ i]);  //写数据,data是编译器关键词   

  72.            i++;

  73.        }

  74.        while(table1[ i]!='\0');     //因为table是字符串

  75.        delayxms(2000);   

  76.        //write_LCD_CD(0,0x01);  //显示清屏,数据指针清0     

  77.        //delayxus(80);

  78.        write_LCD_CD(0,0x0f);

  79.        write_LCD_CD(0,0x01);      

  80.        write_LCD_CD(0,0x80);      

  81.        while(1);  

  82.     }

复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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