480ac80b555d067ce25bbce92e71f882.png (42.74 KB, 下載次數: 30)
下載附件
2021-12-2 15:13 上傳
按K2按鈕不會顯示,
- #include <REGX51.H>
- #include <stdio.h>
- #define u16 unsigned int
- #define u8 unsigned char
- #define DbPins P0 // 宏定義將P0口用DbPins表示
- sbit E = P2^7;
- sbit RS = P2^6;
- sbit RW = P2^5;
- sbit K1 = P3^1; // 四個獨立按鍵
- sbit K2 = P3^0;
- sbit K3 = P3^2;
- sbit K4 = P3^3;
- sbit led1 = P2^0; //左轉向燈
- sbit led2 = P2^2; //右轉向燈
- u16 sign; // 用于判斷有無按鍵被按下 ,0表示有按鍵按下,1表示沒有按鍵按下
- u8 string1_K4[]="left_light_shan";
- u8 string2_K4[]="shan 10 xia";
- u8 string1_K3[]="right_light_shan";
- u8 string2_K3[]="shan 10 xia";
- u8 string3[]="IT class 2 huang yuxing";
- u16 Key_value; //用于接收鍵值的全局變量
- u8 string1[]="IT class 2"; //定義要顯示的字符
- u8 string2[]="huang yuxing";
- void delay(u16 ms)
- {
- u16 a,b;
- for(;ms>0 ; ms--)
- {
- for(b=199;b>0;b--)
- {
- for(a=1;a>0;a--) ;
- }
- }
- }
- // 寫入命令函數
- void LcdWriter(u8 com)
- {
- E = 0; //使能信號,1時讀取信息,下降沿時執行指令
- RS = 0; //低電平表示輸入指令,高電平表示輸入數據
- RW = 0; //高電平向lcd讀取信息,低電平向lcd輸入指令或數據
- DbPins = com; //寫入命令
- delay(1); // 延時 保持數據穩定性
- E = 1; //寫入時序
- delay(5); //保持時間
- E = 0; //下降沿執行指令
- }
- // 輸出函數
- void LcdPrint(u8 date)
- {
- E = 0; // 使能清零
- RS = 1; // 選擇寫入數據
- RW = 0; //選擇寫入
- DbPins = date; // 寫入數據
- delay(1); // 延時1ms
- E = 1; // 讀取信息
- delay(5); //保持時間
- E = 0; // 下降沿執行指令
- }
- // 初始化函數
- void Lcdinit()
- {
- LcdWriter(0x38); //開顯示,數據總線為8位顯示兩行,每個字符為5*7的點陣,
- LcdWriter(0x0c); // 開顯示,不顯示光標
- LcdWriter(0x06); // 寫一個指針加1,向右移動
- LcdWriter(0x01); // 清屏
- LcdWriter(0x80); // 設置數據指針起點
- }
- void out_put1()
- {
-
- u16 i,j,len1,len2;
- Lcdinit();
- len1 = sizeof(string1)-1; // 計算字符串長度
- len2 = sizeof(string2)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2[i]);
- }
- LcdWriter(0x07); // 寫一個指針加1,向右移動
- j=50;
- while(j--)
- for(i=0;i<len1;i++)
- {
- LcdPrint(string3[i]);
- delay(250);
- }
- }
- void out_put()
- {
- u16 i,len1,len2;
- Lcdinit(); //初始化
-
- len1 = sizeof(string1)-1; // 計算字符串長度
- len2 = sizeof(string2)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2[i]);
- }
- while(1);
- }
- // 輸出按下K4輸出的
- void out_put_K4()
- {
-
- u16 i,len1,len2;
- Lcdinit();
- len1 = sizeof(string1_K4)-1; // 計算字符串長度
- len2 = sizeof(string2_K4)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1_K4[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2_K4[i]);
- }
- }
- // 輸出按下K3輸出的
- void out_put_K3()
- {
-
- u16 i,len1,len2;
- Lcdinit();
- len1 = sizeof(string1_K3)-1; // 計算字符串長度
- len2 = sizeof(string2_K3)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1_K3[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2_K3[i]);
- }
- }
- // 模擬獨立按鍵按鈕按下
- void K4_but()
- {
- u16 a= 0;
- if (K4==0) //K4按下
- {
- delay(50); //消抖
- if(K4 == 0)
- {
- Key_value = 16;
- }
-
- while((a>50) && (K4 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K4();
- }
- a= 0;
- if (K3==0) //K3按下
- {
- delay(50); //消抖
- if(K3 == 0)
- {
- Key_value = 17;
- }
-
- while((a>50) && (K3 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K3();
- }
- a = 0;
- if (K2==0) //K2按下
- {
- delay(50); //消抖
- if(K2 == 0)
- {
- Key_value = 18;
-
- }
-
- while((a>50) && (K2 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K2();
- }
- a = 0;
- if (K1==0) //K1按下
- {
- delay(50); //消抖
- if(K1 == 0)
- {
- Key_value = 19;
- }
-
- while((a>50) && (K1 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put();
- }
- }
- void main()
- {
- u16 i;
- sign = 1; // 無按鍵被按下
- Lcdinit(); //初始化
- K1 = 1;
- K2 = 1;
- K3 = 1;
- K4 = 1;
- do{
- while(sign)
- {
- K4_but();
- }
- if(Key_value == 16) // 如果k4 按下D1亮
- {
- for(i = 0;i < 10;i++)
- {led1 = 0;
- delay(100);
- led1 = ~led1;
- delay(100);}
- sign = 1;// 按一次,輸入一個字符
- }
- else if(Key_value == 17) //如果K3按下D3,亮
- {
- for(i = 0;i < 10;i++)
- {led2 = 0;
- delay(100);
- led2 = ~led2;
- delay(100);}
- sign = 1;// 按一次,輸入一個字符
- }
- else if(Key_value == 18)
- {
-
- out_put();
- sign = 1;
- }
- else
- {
- out_put1();
- sign = 1;
- }
- }
- while(1);
- }
復制代碼
按按鈕k1也不會進入我想要的界面
|