📄 cgwos_function.h
字号:
#ifndef __CGWOS_FUN_H__
#define __CGWOS_FUN_H__
/*------------------------------------------------------------------------------
--延时--
说明: 延时时间为1~65535毫秒
*/
void CGWOS_1ms(unsigned int delay_i1)
{
unsigned int delay_j1;
unsigned int delay_k1;
for(delay_j1=delay_i1;delay_j1>0;delay_j1--)
for(delay_k1=124;delay_k1>0;delay_k1--);
}
/*------------------------------------------------------------------------------
--延时--
说明: 延时时间为0.1~2.55毫秒
*/
void CGWOS_01ms(unsigned char delay_i2)
{
unsigned char delay_j2;
unsigned char delay_k2;
for(delay_j2=delay_i2;delay_j2>0;delay_j2--)
for(delay_k2=45;delay_k2>0;delay_k2--);
}
/*------------------------------------------------------------------------------
--4×4矩阵键盘--
//说明:Px是未定义的端口,使用前必须先对Px定义.
+-----------------------------------+
| 返回值=(~a + ~b) |
+-----------+--------------+ | ----------------示例-----------------+
| 行(a) | 列(b) | |
+-----------+--------------+ |
| | 1110 1111 |==>0x11 |
| +--------------+ |
| | 1101 1111 |==>0x21 | 本函数的所有返回值均列在左边的表格中,
| 1111 1110 +--------------+ | 建议用switch()来获取返回值.例如:
| | 1011 1111 |==>0x41 |
| +--------------+ |
| | 0111 1111 |==>0x81 | switch(jianpan())
+-----------+--------------+ | {
| | 1110 1111 |==>0x12 | case 0x11 : {...} break;
| +--------------+ |
| | 1101 1111 |==>0x22 |
| 1111 1101 +--------------+ |
| | 1011 1111 |==>0x42 |
| +--------------+ | ...
| | 0111 1111 |==>0x82 |
+-----------+--------------+ |
| | 1110 1111 |==>0x14 |
| +--------------+ |
| | 1101 1111 |==>0x24 | case 0x88 : {...} break;
| 1111 1011 +--------------+ | default : ;
| | 1011 1111 |==>0x44 | }
| +--------------+ |
| | 0111 1111 |==>0x84 |
+-----------+--------------+ |
| | 1110 1111 |==>0x18 |
| +--------------+ |
| | 1101 1111 |==>0x28 |
| 1111 0111 +--------------+ |
| | 1011 1111 |==>0x48 |
| +--------------+ |
| | 0111 1111 |==>0x88 |
+-----------+--------------+--------+
+5V---------+---+---+---+
| | | |
10K x 4 | | | | | | | |
| | | | | | | |
+-------+ | | | |
| Px.0+---------1---2---3---4 <---------------+
| | | | | | |
| Px.1+---------5---6---7---8 |
| | | | | | |
| Px.2+---------9---0---A---B |
| | | | | | |
| Px.3+---------C---D---E---F <---------------|--------------+
| | | | | | | |
| | | | | | | |
| Px.4+---------+ | | | 初始值 | 移三次
| | | | | 1111 1110 1110 1111
| Px.5+-------------+ | | & 0001 0000 & 0001 0000
| | | | ---------------- ---------------
| Px.6+-----------------+ | 0001 0000 != 0 0000 0000 = 0
| | | | |
| Px.7+---------------------+ +---------+---------+
+-------+ |
*/// |
unsigned char CGWOS_key44(void)// |
{ // |
unsigned char a,b;// 行,列 |
unsigned int delay_j1;// |
unsigned int delay_k1;// |
Px=0xf0; // |
if(Px != 0xf0)// 可能有键按下 |
{ // |
for(delay_j1=10;delay_j1>0;delay_j1--)// |
for(delay_k1=124;delay_k1>0;delay_k1--);// |
if(Px != 0xf0)// 确实有键按下 |
{ // |
a=0xfe; // 扫描初值,按Px.0--->Px.3方向扫描 |
// 判断是否全部扫描完,a的值只能是低四位(行) |
while((a&0x10) != 0)// ---------------------+
{
// Px = 1111 1110 ==> 1111 1101 ==> 1111 1011 ==> 1111 0111
Px=a;// 输出行扫描码
// 判断本行是否有键按下;若无,则移一位继续判断;
// 若有,高四位的其中一位被强制为"0"
if((Px&0xf0) != 0xf0)// 高四位的其中一位被强制为"0",条件成立
{
b=(Px&0xf0) | 0x0f;//只获取高四位(列)的特征码
return((~a) + (~b));// 返回特征字节码(行和列)
}
else
{
// C中没有循环移位,"|0x01"就是为了产生循环移位效果,
// 防止移位时右端补"0",保证每次只有一行为"0"
a=(a << 1)|0x01;// 行扫描码左移一位
}
}
}
}
else
{
return(0);// 无键按下,返回零
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -