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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品久久久久久 | 久久久久久综合 | 国产精品一区二 | 国产免费xxx | 日韩欧美在线免费 | 在线观看免费av网 | 人人干人人舔 | 国产九九九九 | www.婷婷亚洲基地 | 天天影视亚洲综合网 | 羞羞视频网站免费看 | 一区二区在线观看av | 妖精视频一区二区三区 | 亚洲一区二区国产 | 精品欧美一区二区在线观看 | 仙人掌旅馆在线观看 | 久艹av | 特黄小视频| 欧美一区永久视频免费观看 | 午夜成人免费视频 | 黄色成人免费在线观看 | 精品久久久久久久久久久久久 | 99精品观看 | 日本超碰 | 成人av免费 | 偷拍亚洲色图 | 亚洲午夜在线 | a视频在线观看 | 国产精品欧美日韩 | 日本三级全黄三级三级三级口周 | 欧美第一页 | 俺去俺来也www色官网cms | 男人的天堂亚洲 | 国产精品久久久久久久岛一牛影视 | 欧美精品一区二区三区蜜桃视频 | 中文字幕av在线播放 | 久久九九99 | 91精品国产91久久久久游泳池 | 国产精品久久久久久久久久尿 | 伊人网国产 | 九九热精品在线 |