|
0.png (40.62 KB, 下載次數: 141)
下載附件
2016-8-15 18:41 上傳
單片機可調直流電源鍵盤使用說明:
1:按下 MODE 鍵,在鍵盤和旋鈕之間切換
鍵盤模式
1:按下 SET 鍵
2:按下 0--9.99之間的電壓值
3:按下 ENTER 鍵
旋鈕模式
1:調節可調電阻,電壓隨之改變
0.png (75.19 KB, 下載次數: 144)
下載附件
2016-8-15 18:40 上傳
單片機可調直流電源程序如下:
- #include "global.h"
- #include "key.h"
- #include "lcd.h"
- #include "adcdac.h"
- uchar Pre_KeyNO = 16,KeyNO = 16;
- uchar keybuf[6];
- uchar keycnt;
- bit pointflag;
- bit newvalueflag;
- bit updateflag;
- bit setenable;
- uchar Keys_Scan()
- {
- uchar Tmp;
- KEYPORT = 0x0f;
- Delayms(10);
- Tmp = KEYPORT ^ 0x0f;
- switch(Tmp)
- {
- case 1: KeyNO = 0; break;
- case 2: KeyNO = 1; break;
- case 4: KeyNO = 2; break;
- case 8: KeyNO = 3; break;
- default: ;
- }
- KEYPORT = 0xf0;
- Delayms(1);
- Tmp = KEYPORT >> 4 ^ 0x0f;
- switch(Tmp)
- {
- case 1: KeyNO += 0; break;
- case 2: KeyNO += 4; break;
- case 4: KeyNO += 8; break;
- case 8: KeyNO += 12;
- default: ;
- }
- while(KEYPORT != 0xf0);
- return(KeyNO) ;
- }
- /*
- 刪除字符串中的小數點
- */
- /*
- void delchar(char *s, char c)
- {
- char *m=s;
- char *n=s;
- while(*m)
- {
- if(*m!=c)
- *n++=*m;
- m++;
- }
- *n='\0';
- }
- */
- /*
- 字符串轉換成浮點數
- */
- double str2num(char *s)
- {
- char i,num[6];
- double b=1;
- double sum=0.0;
- strcpy(num , s);
- for(i=0;num[i] && num[i]!='.';i++)
- {
- sum*=10;
- sum+=(num[i]-'0');
- }
- if(num[i]=='.')
- {
- for(i++;num[i];i++)
- {
- b*=0.1;
- sum+=b*(num[i]-'0');
- }
- }
- return(sum);
- }
- /*
- 鍵盤輸入處理
- 定義了0-9的數字鍵,小數點,刪除,設定,確認,模式切換鍵
- 1、按模式切換進入鍵盤模式
- 2、按設定鍵
- 3、輸入數字0.0 -9.9之內整數小數都可以
- 4、確認
- 5、要輸入新的值重復2-4,模式鍵可返回旋鈕模式
- */
- void keyhandle(uchar key)
- {
- uchar i;
- uint temp;
- uchar buf[6];
- double d;
- Pre_KeyNO =key;
- if(Pre_KeyNO == KEY_MODE)//鍵盤模式和旋鈕模式切換
- {
- workmode = !workmode;
- if(workmode==MODE_B)
- {
- updateflag = 0;
- for(i=0;i<16;i++)
- {
- Display_Buffer0[i]= ' ';
- Display_Buffer1[i]= ' ';
- }
- for(i=0;i<6;i++)
- {
- keybuf[i]= '\0';
- }
- strcpy(Display_Buffer0 , "Pls Press Set");
- DisplayUpdate();
- }
- else
- {
- Write_LCD_Command(0x0c);
- }
- return;
- }
- if(workmode==MODE_B) //鍵盤模式處理
- {
- if(Pre_KeyNO == KEY_SET)
- {
- keycnt = 0;
- pointflag = 0;
- newvalueflag = 0;
- updateflag = 0;
- setenable = 1;
- strcpy(Display_Buffer0 , "Pls Set Voltage:");
- for(i=0;i<16;i++)
- {
- Display_Buffer1[i]= ' ';
- }
- for(i=0;i<6;i++)
- {
- keybuf[i]= '\0';
- }
- DisplayUpdate();
- Write_LCD_Command(0xc0);
- Write_LCD_Command(0x0f);
- return;
- }
- if((!updateflag)&&(setenable))
- {
- switch (Pre_KeyNO)
- {
- case KEY_POINT: //小數點處理
- if((!pointflag)&&(keycnt))
- {
- if(keycnt<5)
- {
- pointflag = 1;
- keybuf[keycnt] = '.';
- keycnt++;
- keybuf[keycnt] = '\0';
- }
- }
- break;
- case KEY_BACK: //刪除剛輸入的鍵
- if(keycnt)
- {
- keybuf[keycnt] = '\0';
- keycnt--;
- if(keybuf[keycnt] == '.')
- pointflag = 0;
- keybuf[keycnt] = ' ';
- }
- else
- {
- keybuf[0] = ' ';
- }
- break;
- case KEY_ENTER: //更新數據,退出
- strcpy(buf , keybuf);
- strcpy(Display_Buffer1 , "SetVoltage:");
- strcat(Display_Buffer1 , keybuf);
- ShowString(0,1,Display_Buffer1);
- d = str2num(buf);
- temp = d * 1000/10;
- Set_DAC(temp);
- updateflag = 1;
- setenable = 0;
- strcpy(Display_Buffer0 , "OutVoltage:");
- Write_LCD_Command(0x0c);
- return;
- break;
- case KEY_EXIT: //不更新數據,退出
-
- break;
- default: //數字按鍵處理
- if((Pre_KeyNO>=0)&& (Pre_KeyNO<10))
- {
- if(keycnt<5)
- {
- keybuf[keycnt] = Pre_KeyNO + '0';
- keycnt++;
- keybuf[keycnt] = '\0';
- }
- }
- break;
- }
- strcpy(Display_Buffer1,keybuf);
- DisplayUpdate();
- Write_LCD_Command(0xc0+keycnt);
- Write_LCD_Command(0x0f);
- }
-
- }
- }
復制代碼
|
-
-
可調直流電源鍵盤輸入.zip
2016-8-15 18:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
141.99 KB, 下載次數: 59, 下載積分: 黑幣 -5
|