欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請問下面這個單片機程序為什么按鍵沒有顯示? [打印本頁]

作者: return520    時間: 2021-4-10 12:54
標題: 請問下面這個單片機程序為什么按鍵沒有顯示?
按鍵掃描:
#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進行消抖
        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液晶寫命令函數,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)  // 液晶光標定位函數
{
        // 第一行
        if(line==0)        
                LcdWriteCmd(0x80+column);
        // 第二行
        if(line==1)        
                LcdWriteCmd(0x80+0x40+column);
}

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

void LcdInit()               // 1602液晶初始化函數
{
        LcdWriteCmd(0x38);        // 16*2顯示,5*7點陣,8位數據口
        LcdWriteCmd(0x0C);        // 開顯示,不顯示光標
        LcdWriteCmd(0x06);        // 地址加1,當寫入數據后光標右移
        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()     // 液晶顯示內容的初始化
{  gMode=keyscan();
        LcdGotoXY(0,0);
        LcdPrintMode(gMode);
}

主函數:
#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();         // 發射模塊初始化
LcdInit();                        // 執行液晶初始化        
LcdShowInit();        // 液晶顯示內容的初始化
        
while(1)
{
keyval=keyscan();
while(keyscan());
if(keyval) {send_infrared(keyval);
LcdShowInit();   
}

}
}







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1