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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3704|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天爽一爽 | 91久久久久久久久久久 | 在线观看av网站 | 国产ts一区| 99爱在线免费观看 | 欧美一区二区 | 国产色婷婷久久99精品91 | 奇米超碰在线 | 国产精品久久久久久久粉嫩 | 麻豆成人在线视频 | 久久久久久国产精品三区 | 国产欧美一区二区三区日本久久久 | 天堂成人国产精品一区 | 国产精品99久久久久久动医院 | 亚洲国产精品久久久久 | 在线一区二区三区 | 一区二区不卡高清 | 国产一区不卡 | 午夜精品一区二区三区在线观看 | 欧美自拍日韩 | 狠狠骚| www.日韩在线 | 日本精品一区二区三区在线观看视频 | 最新日韩欧美 | 精品久久久久久久人人人人传媒 | 欧州一区二区三区 | 精品1区2区3区 | 久久久久久久久久久久一区二区 | 蜜桃视频在线观看www社区 | 国产在线播 | www国产成人 | 国产精品久久久久久久久久久免费看 | 在线播放一区二区三区 | 国产精品久久久久久久久久久免费看 | 在线2区 | 欧美国产日韩精品 | 国产一区二区三区四区hd | 国产激情三区 | 99精品一区二区三区 | 99久久99| 国产欧美一区二区三区在线看 |