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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1406|回復: 1
打印 上一主題 下一主題
收起左側(cè)

51單片機關(guān)于12864液晶按鍵串行顯示字符和清屏的程序幫忙看看有什么錯誤

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:986164 發(fā)表于 2021-11-30 09:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>                                                 //52系列單片機頭文件
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char                                //宏定義
#define uint  unsigned int
#define LCD_data P1                                                //數(shù)據(jù)口
uchar i;
sbit key1=P3^0;
sbit key2=P3^1;
sbit LCD_PSB=P3^4;                                                //串行,并行選擇接口
sbit LCD_CS=P3^5;                                            //串行片選信號
sbit LCD_SID=P3^6;                                                //串行數(shù)據(jù)輸入
sbit LCD_SCLK=P3^7;
void lcd_sbyte();                                                //串行時鐘
uchar code dis1[]={"物電創(chuàng)新基地"};
uchar code dis2[]={"姓名;劉冰冰"};
uchar code dis3[]={"202107044138"};
uchar code dis4[]={"xzxdbb"};
void keyscan();                                                        //函數(shù)聲明
//void delay_1ms(uint x);
void delayms(uint xms);
void lcd_sbyte();                                                                         
void write_cmd(uchar cmd);
void write_dat(uchar dat);
void lcd_init();                                                //LCD初始化設(shè)定
void lcd_pos(uchar x,uchar y);
void main()                                                                //主函數(shù)
{
        lcd_init();                                                        //調(diào)用清屏函數(shù)
        while(1)
        keyscan();
                                                                              //循環(huán)執(zhí)行按鍵掃描函數(shù)
}
void keyscan()                                                         //按鍵循環(huán)函數(shù)
{
        uchar i;                                                               
        if(key1==0)                                                          //按鍵1開始,程序檢測key1==0,執(zhí)行下面的指令
        {  
                delayms(10);                                          //按鍵去抖延時
                if(key1==0)
                {
                        lcd_pos(0,0);                                  //設(shè)置顯示位置為第一行的第一個字符                       
                        i=0;
                        while(dis1[i]!='\0')                  //當查到空字符時退出循環(huán)
                        {                                                                                 
                                write_dat(dis1[i]);                  //顯示字符
                                i++;
                        }
                        lcd_pos(1,0);                                       //設(shè)置顯示位置為第二行的第一個字符
                        i=0;
                        while(dis2[i]!='\0')                        //當查到空字符時退出循環(huán)
                        {
                                write_dat(dis2[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(2,0);                                        //設(shè)置顯示位置為第三行的第一個字符
                        i=0;
                        while(dis3[i]!='\0')                        //當查到空字符時退出循環(huán)
                        {
                                write_dat(dis3[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(3,0);                                        //設(shè)置顯示位置為第四行的第一個字符
                        i=0;
                        while(dis4[i]!='\0')                        //當查到空字符時退出循環(huán)
                        {
                                write_dat(dis4[i]);                        //顯示字符
                                i++;
                        }
                }

        }
        if(key2==0)                                                                //程序檢測key2==0,執(zhí)行下面的指令
        {  
                delayms(10);                                                //按鍵去抖延時
                if(key2==0)
                {
                        LCD_PSB=0;                                                //串口方式
                        write_cmd(0x01);                                //清除LCD顯示內(nèi)容

                }
         
         }
}
void delayms(uint xms)                        //延時函數(shù)
{
        int i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);                                 
}
void lcd_sbyte(uchar by)            //輸出串行數(shù)據(jù)
{
        uchar s;
        for(s=0;s<8;s++)
        {
                LCD_SID=by&0x80;                //將by的最高位取出來賦給SID
                by=by<<1;                                //依次將by的每一位從高到低在SCLK的作用送給SID
                LCD_SCLK=0;                                //輸入數(shù)據(jù)
                LCD_SCLK=1;
        }
}       
void write_cmd(uchar cmd)                //寫指令數(shù)據(jù)到LCD
{       
        LCD_CS=1;
        lcd_sbyte(0Xf8);                        //發(fā)送指令
        lcd_sbyte(cmd&0xf0);                //將所發(fā)送字節(jié)的高四位取出,低四位補0
        lcd_sbyte(cmd<<4);                    //將所發(fā)送的字節(jié)低四位移到高四位的位置上,原來的低四位自動補0
        LCD_SCLK=0;                                        //輸入數(shù)據(jù)
        LCD_SCLK=1;
        LCD_CS=1;
        delayms(100);
}
void write_dat(uchar dat)                //寫顯示數(shù)據(jù)到LCD
{       
        LCD_CS=1;
        lcd_sbyte(0Xfa);                        //發(fā)送數(shù)據(jù)
        lcd_sbyte(dat&0xf0);                //將所發(fā)送字節(jié)的高四位取出,低四位補0
        lcd_sbyte(dat<<4);                        //將所發(fā)送的字節(jié)低四位移到高四位的位置上,原來的低四位自動補0
        LCD_SCLK=0;                                        //輸入數(shù)據(jù)
        LCD_SCLK=1;
        LCD_CS=0;
        delayms(100);

}
void lcd_pos(uchar x,uchar y)        //設(shè)定顯示位置
{
        uchar pos;
        switch(x)
        {                                                        //x的范圍為0-3,y的范圍為0-7
                case 0: x=0x80;break;
                case 1: x=0x90;break;
                case 2: x=0x88;break;
                case 3: x=0x98;break;
                default: break;
        }
        pos=x+y;
        write_cmd(pos);                             //顯示地址
}
//void lcd_init()                                //LCD初始化設(shè)定
//{
//        LCD_PSB=0;                                        //串口方式
//        write_cmd(0x30);                        //基本指令操作
//        delayms(5);                                                       
//        write_cmd(0x0c);                        //顯示開,關(guān)光標
//        delayms(5);
//        write_cmd(0x01);                        //清除LCD顯示內(nèi)容
//        delayms(5);
//}
void lcd_init()
{
        delayms(5);
        write_cmd(0x30);                        //基本指令操作
        write_cmd(0x02);
        write_cmd(0x06);
        write_cmd(0x0c);
        write_cmd(0x01);
        write_cmd(0x80);
}


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

使用道具 舉報

沙發(fā)
ID:262 發(fā)表于 2021-11-30 18:23 | 只看該作者
編譯器提示的什么錯誤,貼圖看看
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 女人一区| 亚洲综合久久精品 | 国产女人第一次做爰毛片 | 久久精品国产亚洲一区二区 | 福利久久 | 一级黄色片一级黄色片 | 久久久新视频 | 日韩在线不卡 | 国产精品久久精品 | 欧美精品网站 | 精品国产乱码久久久久久蜜退臀 | www久久久 | 国产一级免费在线观看 | 国产美女精品 | 免费精品在线视频 | 日韩av在线一区二区 | 一级黄色片网站 | 亚洲九九精品 | 久久剧场| 国产精品免费一区二区三区四区 | 中文字幕av免费 | 亚洲av毛片成人精品 | 成人黄色在线观看 | 久草热视频 | 日韩aⅴ视频 | 日韩精品一区二区三区中文字幕 | 国产精品美女久久久av超清 | 亚洲二区在线 | 久久99蜜桃综合影院免费观看 | 麻豆久久久 | 又爽又黄axxx片免费观看 | 国产精品一二三区 | 久久久久国产一区二区三区 | 97色综合| 青青草综合网 | 精品国产一区二区三区性色av | 亚洲成人免费视频 | 美女爽到呻吟久久久久 | 久久精品免费观看 | 色.com| 成在线人视频免费视频 |