找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1188|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

請問下面這個單片機(jī)程序?yàn)槭裁窗存I沒有顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:880793 發(fā)表于 2021-4-10 12:54 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
按鍵掃描:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char  
#define key0 P3^1
#define key1 P3^0
#define key2 P3^2
#define key3 P2^3
#define key4 P2^4
#define key5 P2^5
extern void delay1ms(uint time);

uchar keyscan(void)
{
uchar keyval;
  P3=1;
        if(P3!=0xff)
        {
                delay1ms(10);//延時10ms進(jìn)行消抖
        if(P3!=0xff)
  {
         if(key0==0) keyval=0;
         if(key1==0) keyval=1;
         if(key2==0) keyval=2;
         if(key3==0) keyval=3;
         if(key4==0) keyval=4;
         if(key5==0) keyval=5;
        }
}
return(keyval);
}

1602顯示:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
extern uchar keyscan(void);

uchar gMode;                                                                // 1是手動模式,2是定時模式,3是光控模式

extern void delay1ms(uint time);
sbit LcdRs_P    = P2^6;       // 1602液晶的RS管腳      
sbit LcdRw_P    = P2^5;       // 1602液晶的RW管腳
sbit LcdEn_P    = P2^7;       // 1602液晶的EN管腳


void LcdWriteCmd(uchar cmd)  // 1602液晶寫命令函數(shù),cmd就是要寫入的命令
{
        LcdRs_P = 0;
        LcdRw_P = 0;
        LcdEn_P = 0;
        P0=cmd;
        delay1ms(2);
        LcdEn_P = 1;   
        delay1ms(2);
        LcdEn_P = 0;        
}

void LcdWriteData(uchar dat)
{
        LcdRs_P = 1;
        LcdRw_P = 0;
        LcdEn_P = 0;
        P0=dat;
        delay1ms(2);
        LcdEn_P = 1;   
        delay1ms(2);
        LcdEn_P = 0;
}

void LcdGotoXY(uchar line,uchar column)  // 液晶光標(biāo)定位函數(shù)
{
        // 第一行
        if(line==0)        
                LcdWriteCmd(0x80+column);
        // 第二行
        if(line==1)        
                LcdWriteCmd(0x80+0x40+column);
}

void LcdPrintStr(uchar *str)   // 液晶輸出字符串函數(shù)
{
        while(*str!='\0')
                        LcdWriteData(*str++);
}

void LcdInit()               // 1602液晶初始化函數(shù)
{
        LcdWriteCmd(0x38);        // 16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)口
        LcdWriteCmd(0x0C);        // 開顯示,不顯示光標(biāo)
        LcdWriteCmd(0x06);        // 地址加1,當(dāng)寫入數(shù)據(jù)后光標(biāo)右移
        LcdWriteCmd(0x01);        // 清屏
}

void LcdPrintMode(uchar num) // 顯示模式
{
        switch(num)                        
        {
                case 1: LcdPrintStr("Manual");        break;
                case 2: LcdPrintStr("Timing");        break;
                case 3: LcdPrintStr("Liging");        break;
                default:                                      break;
        }
}

void LcdShowInit()     // 液晶顯示內(nèi)容的初始化
{  gMode=keyscan();
        LcdGotoXY(0,0);
        LcdPrintMode(gMode);
}

主函數(shù):
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
extern uchar keyscan(void);
extern void init(void);
extern void LcdInit(void);
extern void LcdShowInit(void);
extern void LcdPrintMode(uchar keyval);
extern void send_infrared(uchar keyval);
void delay1ms(uint time) {
uint i,j;
for(i=0;i<time;i++)
for(j=0;j<110;j++);
}
void main()
{
uchar keyval;
init();         // 發(fā)射模塊初始化
LcdInit();                        // 執(zhí)行液晶初始化        
LcdShowInit();        // 液晶顯示內(nèi)容的初始化
        
while(1)
{
keyval=keyscan();
while(keyscan());
if(keyval) {send_infrared(keyval);
LcdShowInit();   
}

}
}


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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表