久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3807|回復: 1
打印 上一主題 下一主題
收起左側

單片機LCD1602從左到右、從右到左顯示,proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
*  描述:                LCD1602 滾動顯示                                       *
* 顯示方式:                                                                   *
* 1、從左到右逐字顯示,閃動二次,清屏。                                        *
* 2、再從右到左逐字顯示,閃動二次,清屏。                                      *
* 3、周期性地重復上述顯示方式。                                                *                           
同時帶仿真


        #include <reg51.h>        //51寄存器文件
        #include <intrins.h>
        
        typedef unsigned char BYTE;        //用BYTE代替unsigned char
        typedef bit BOOL;  // 用BOOL代替bit
        
        sbit LCD_RS = P2^6;  //寄存器選擇(RS=0,命令寄存器;RS=1,數據寄存器)            
        sbit LCD_RW = P2^5;         //讀寫端(RW=1,讀;RW=0,寫)
        sbit LCD_EP = P2^7;         //使能端
        
        BYTE code dis1[] = {"   WELCOME  TO  "};
        BYTE code dis2[] = {"   MY  ZONE ST  "};
        BYTE code dis3[] = {"   OT  EMOCLEW  "};
        BYTE code dis4[] = {"   TS ENOZ  MY  "};

/****************延時函數************************/        
        void delay(int ms)
        {                    //延時子程序
        int i;
        while(ms--)
        {
          for(i = 0; i< 250; i++)
          {
           _nop_();          //空執行
           _nop_();
           _nop_();
           _nop_();
          }
        }
        }

/****************查忙函數************************/               
        BOOL lcd_bz()
        {                        
        BOOL result;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result = (BOOL)(P0 & 0x80);         //檢測P0最高位是否為1
        LCD_EP = 0;
        return result;//返回查忙結果
        }

/****************寫命令函數************************/        
        void lcd_wcmd(BYTE cmd)
        {                          // 寫入指令數據到LCD
        while(lcd_bz());
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EP = 0;
        _nop_();
        _nop_();
        P0 = cmd; //將8位指令通過P0口傳給1602
        _nop_();
        _nop_(); //用于產生一個脈沖寬度
        _nop_();
        _nop_();
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCD_EP = 0;  
        }
        
        void lcd_pos(BYTE pos)
        {                          //設定顯示位置
        lcd_wcmd(pos | 0x80);
        }

/****************寫數據函數************************/        
        void lcd_wdat(BYTE dat)
        {                   //寫入字符顯示數據到LCD
        while(lcd_bz());
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EP = 0;
        P0 = dat;  //將8位數據通過P0口傳給1602
        _nop_();
        _nop_();   //用于產生一個脈沖寬度
        _nop_();
        _nop_();
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCD_EP = 0;
        }
        
        void lcd_init()
        {                   //LCD初始化設定
        lcd_wcmd(0x38);     //16*2顯示,5*7點陣,8位數據
        delay(1);
        lcd_wcmd(0x0c);     //顯示開,關光標
        delay(1);
        lcd_wcmd(0x06);     //移動光標
        delay(1);
        lcd_wcmd(0x01);     //清除LCD的顯示內容
        delay(1);
        }

/****************主函數************************/        
        main()
        {
            BYTE i;
            lcd_init();// 初始化LCD
            delay(10);
        
            while(1)              
           {
              lcd_wcmd(0x06);//向右移動光標
              lcd_pos(0);//設置顯示位置為第一行的第1個字符
              i = 0;
             while(dis1[ i ] != '\0')
             {   //顯示字符"WLCOME  TO"
               lcd_wdat(dis1[ i ]);
               i++;
               delay(30);//控制兩字之間顯示速度
             }
              lcd_pos(0x40);//設置顯示位置為第二行第1個字符
              i = 0;
             while(dis2[ i ] != '\0')
             {
               lcd_wdat(dis2[ i ]);//顯示字符" HUANGHUAI  "
               i++;
               delay(30);//控制兩字之間顯示速度
             }
              delay(800);//控制停留時間
        
              lcd_wcmd(0x01);//清除LCD的顯示內容
              delay(1);
              lcd_wcmd(0x04);//向左移動光標
            
              lcd_pos(15);//設置顯示位置為第一行的第16個字符
              i = 0;
             while(dis3[ i ] != '\0')
             {                 //顯示字符"WLCOME  TO"
               lcd_wdat(dis3[ i ]);
               i++;
               delay(30);          //控制兩字之間顯示速度
             }
              lcd_pos(0x4F);      //設置顯示位置為第二行的第16個字符
              i = 0;
             while(dis4[ i ] != '\0')
             {
               lcd_wdat(dis4[ i ]);  //顯示字符" HUANGHUAI  "
               i++;
               delay(30);       //控制兩字之間顯示速度
             }
              delay(800);       //控制停留時間
        
              lcd_wcmd(0x01);   //清除LCD的顯示內容
              delay(200);       //控制兩屏轉換時間
                  
           }
        }
         
         


51hei截圖20210128142235.png (21.05 KB, 下載次數: 47)

51hei截圖20210128142235.png

lcd1602的應用.zip

85.55 KB, 下載次數: 24, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:582255 發表于 2021-1-29 11:43 | 只看該作者
為什么proteus仿真時下面有黃色提示,但是不影響仿真
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线午夜| 成人福利在线 | 久久天天躁狠狠躁夜夜躁2014 | 中文字幕在线一区二区三区 | 在线欧美一区 | 亚洲一区二区三区 | 午夜久久久久久久久久一区二区 | 青娱乐一区二区 | 亚洲免费视频网站 | 久久精品这里 | 亚洲午夜一区二区 | 天天在线操 | 日本精品久久 | 日本精品一区二区三区视频 | 日本福利一区 | 国产精品区一区二区三 | 精品日韩一区二区 | 成人久草| 国产真实乱全部视频 | 免费观看视频www | 国产97在线 | 日韩 | 色在线看 | 国产91亚洲精品一区二区三区 | 亚洲精品一二区 | 日韩激情视频一区 | 国产欧美一区二区在线观看 | aaa级片 | 91福利在线观看视频 | 国产一级特黄视频 | 日本网站免费在线观看 | 夜夜精品浪潮av一区二区三区 | 91精品在线播放 | 久久久久久久久久久久久久av | 久久男人 | 国产精品女人久久久 | 99只有精品 | 自拍偷拍视频网 | 一区二区视频在线 | 黄色国产视频 | 日韩高清一区 | 欧美成人黄色小说 |