资源简介
精确测量0~10k电阻阻值,使用一颗精确电阻校准后,测量的阻值精确到福禄克级别
代码片段和文件信息
#include
// 设置KEY IO口
sbit KEY_IN_1 = P2^4;
sbit KEY_IN_2 = P2^5;
sbit KEY_IN_3 = P2^6;
sbit KEY_IN_4 = P2^7;
sbit KEY_OUT_1 = P2^3;
sbit KEY_OUT_2 = P2^2;
sbit KEY_OUT_3 = P2^1;
sbit KEY_OUT_4 = P2^0;
u8 xdata g_KeySta[4][4]; // 按键两个状态:松开0 按下1
const u8 code g_KeyCodeMap[4][4] = {
{ ‘1‘ ‘2‘ ‘3‘ 0x26 } //数字键1、数字键2、数字键3、退格键
{ ‘4‘ ‘5‘ ‘6‘ 0x25 } //数字键4、数字键5、数字键6、重置键
{ ‘7‘ ‘8‘ ‘9‘ 0x28 } //数字键7、数字键8、数字键9、转换键
{ ‘0‘ 0x1B 0xC 0x27 } //数字键0、未定义、 未定义、 回车键
};
extern u8 g_Mode_Type;
extern u16 g_Set_Res_Val;
extern u8 g_Enter_Flag;
// 按键动作实现
void Key_Action(u8 keycode)
{
u8 buff[20];
u16 val = 0;
switch (g_Mode_Type)
{
// 一般模式
case GENERAL_MODE:
switch (keycode)
{
case 0x28:
// 输入转换键
LcdWriteCmd(0x01);
g_Set_Res_Val = 0;
g_Enter_Flag = 0;
g_Mode_Type = COMP_MODE;
LcdShowStr(0 0 “0“);
break;
}
break;
case COMP_MODE:
switch (keycode)
{
case ‘1‘:
case ‘2‘:
case ‘3‘:
case ‘4‘:
case ‘5‘:
case ‘6‘:
case ‘7‘:
case ‘8‘:
case ‘9‘:
case ‘0‘:
// 按下回车
if (g_Enter_Flag == 0) {
// 输入1~9后的动作
val = g_Set_Res_Val;
val *= 10;
val += keycode - ‘0‘; // 保存测试值
// 值超出
if (val > 10000L) {
LcdShowStr(0 1 “VAL ERROR!“);
}
else {
g_Set_Res_Val = val;
sprintf(&buff[0] “%d“ g_Set_Res_Val);
if (g_Set_Res_Val) LcdShowStr(0 0 &buff[0]);
else LcdShowChar(0 0 ‘0‘);
}
}
break;
// 退格键
case 0x26:
// 按下退格
if (g_Enter_Flag == 0) {
g_Set_Res_Val /= 10;
sprintf(buff “%d“ g_Set_Res_Val);
LcdWriteCmd(0x01);
if (g_Set_Res_Val) LcdShowStr(0 0 buff);
else LcdShowStr(0 0 ‘0‘);
}
break;
// 重置键
case 0x25:
LcdWriteCmd(0x01);
LcdShowStr(0 0 ‘0‘);
g_Set_Res_Val = 0;
g_Enter_Flag = 0;
break;
// 转换键
case 0x28:
LcdWriteCmd(0x01);
g_Set_Res_Val = 0;
g_Enter_Flag = 0;
g_Mode_Type = GENERAL_MODE;
break;
// 回车键
case 0x27:
g_Enter_Flag = 1;
break;
}
break;
// 其他模式
default: break;
}
}
// 按键执行函数
void Key_Handle(void)
{
u8 i j;
static u8 xdata s_bkKey[4][4];
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (s_bkKey[i][j] != g_KeySta[i][j]) {
if (g_KeySta[i][j] == KEY_DOWN)
{
// 按下执行的操作
Key_Action(g_KeyCodeMap[i][j]);
}
s_bkKey[i][j] = g_KeySta[i][j];
}
}
}
}
// 按键扫描
void Key_Scan(void)
{
static u8 s_ikey_out = 0 i =0;
static u8 xdata s_KeyBuff[4][4];
// 获取按键并消抖
s_KeyBuff[s_ikey_out][0] = ((s_KeyBuff[s_ikey_out][0] << 1) | KEY_IN_1) & KEY_DELAY_MARK;
s_KeyBuff[s_ikey_out][1] = ((s_KeyBuff[s_ikey_out][1] << 1) | KEY_IN_2) & KEY_DELAY_MARK;
s_KeyBuff[s_ikey_out][2
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 513 2017-11-09 21:27 copy\HARDWARE\inr\config.h
文件 214 2017-11-09 20:57 copy\HARDWARE\inr\key.h
文件 259 2017-11-09 21:34 copy\HARDWARE\inr\lcd1602.h
文件 253 2017-11-09 20:52 copy\HARDWARE\inr\timer.h
文件 145 2017-11-09 21:00 copy\HARDWARE\inr\tlc2543.h
文件 3949 2017-11-09 21:38 copy\HARDWARE\src\key.c
文件 1256 2017-11-09 22:14 copy\HARDWARE\src\lcd1602.c
文件 912 2017-11-09 20:56 copy\HARDWARE\src\timer.c
文件 651 2017-11-09 22:41 copy\HARDWARE\src\tlc2543.c
文件 45340 2017-11-10 07:39 copy\OBJ\copy
文件 13590 2017-11-10 07:39 copy\OBJ\copy.hex
文件 183 2017-11-10 07:39 copy\OBJ\copy.lnp
文件 2712 2017-11-10 07:46 copy\OBJ\copy.plg
文件 11924 2017-11-10 07:39 copy\OBJ\key.obj
文件 8070 2017-11-10 07:39 copy\OBJ\lcd1602.obj
文件 13711 2017-11-10 07:39 copy\OBJ\main.obj
文件 783 2017-11-10 07:39 copy\OBJ\STARTUP.obj
文件 8102 2017-11-10 07:39 copy\OBJ\timer.obj
文件 6721 2017-11-10 07:39 copy\OBJ\tlc2543.obj
文件 39492 2017-11-10 07:39 copy\PROJECT\copy.m51
文件 20428 2017-11-09 21:29 copy\PROJECT\copy.plg
....... 60695 2017-11-10 07:12 copy\PROJECT\copy.uvopt
....... 14381 2017-11-09 21:38 copy\PROJECT\copy.uvproj
....... 60692 2017-11-09 21:38 copy\PROJECT\copy_uvopt.bak
....... 0 2017-11-09 16:24 copy\PROJECT\copy_uvproj.bak
文件 11377 2017-11-10 07:39 copy\PROJECT\key.lst
文件 3686 2017-11-10 07:39 copy\PROJECT\lcd1602.lst
文件 8181 2017-11-10 07:39 copy\PROJECT\main.lst
文件 6376 2009-05-07 14:37 copy\PROJECT\STARTUP.A51
文件 14088 2017-11-10 07:39 copy\PROJECT\STARTUP.LST
............此处省略14个文件信息
评论
共有 条评论