找回密码
 立即注册

QQ登录

只需一步,快速开始

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

使用的是51+1602液晶,就是插上点阵后发现液晶就显示不出相应的数字了,求大佬指点...

[复制链接]
跳转到指定楼层
楼主
ID:345750 发表于 2018-7-20 08:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

        #include <reg52.h>
        typedef unsigned char uchar8;
        typedef unsigned int  uint16;
        uchar8 code TAB1[] = "l do what l do";
        uchar8 code TAB2[] = "1711";
       
        sbit RS = P3^5;           //数据or命令选择端(H/L)
        sbit RW = P3^4;           //读/写选择端(H/L)
        sbit EN = P3^3;           //使能信号(电平)
        sbit BIT_ = P1^6;
        sbit SEG_ = P1^7;

        void DelayMS(uint16 val)
        {
                uint16 i, j;
                for(i = 0; i < val; i++)
                        for(j = 0; j < 113; j++);
        }
       
        /*************************************
        *函数名称:DectectBusyBit()
        *函数功能:检测状态标志位(忙or闲)
        ***************************************/
        void DectectBusyBit(void)
        {
                P0 = 0xff;                         //读取状态值时,先赋高电平
                RS = 0;
                RW = 1;
                EN = 1;
                DelayMS(1);
                while(P0 & 0x80);         //若LCD忙,则停止在这里,否则走起
                EN = 0;                            //之后将EN初始化为低电平
        }
         
         /****************************************
         *函数名称:WrComLCD()
         *函数功能:为LCD写指令
         *入口参数:指令(ComVal)
         *****************************************/
         void WrComLCD(uchar8 ComVal)
         {
                 DectectBusyBit();
                RS = 0;
                RW = 0;
                EN = 1;
                P0 = ComVal;
                DelayMS(1);
                EN = 0;
         }
         /*******************************************
         *函数名称:WrDatLCD()
         *函数功能:为LCD写数据
         *入口参数: 数据(DatVal)
         ********************************************/
         void WrDatLCD(uchar8 DatVal)
         {
                 DectectBusyBit();
                RS = 1;
                RW = 0;
                EN = 1;
                P0 = DatVal;
                DelayMS(1);
                EN = 0;
         }
         /******************************************
         *函数名称:LCD_Init()
         *函数功能:初始化LCD
         *******************************************/
         void LCD_Init(void)
         {
                 WrComLCD(0x38);
                DelayMS(1);
                WrComLCD(0x38);
                WrComLCD(0x01);
                WrComLCD(0x06);
                DelayMS(1);
                WrComLCD(0x0c);

         }
         void main(void)
         {
                 uchar8 ucval;
                SEG_ = 1;
                P0 = 0x00;
                SEG_ = 0;
                BIT_ = 1;
                P0 = 0xff;
                BIT_ = 0;
                LCD_Init();
                DelayMS(5);
                WrComLCD(0x80);
                while(TAB1[ucval] != '\0')
                {
                        WrDatLCD(TAB1[ucval]);
                        ucval++;
                }
                ucval = 0;
                WrComLCD(0xc0);
                while(TAB2[ucval] != '\0')
                {
                        WrDatLCD(TAB2[ucval]);
                        ucval++;
                }
                while(1);
         }

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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