/* ch05-4-4.c - 4x4键盘与4个7节显示器实验, P1.4~7为共用扫描信号 */
/* P1.0~3为键盘输入值,P2为7节显示器直接输出 */
//==声明区================================================
#include #define KEYP P2 // 扫瞄输出端口(高位元)及键盘输入端口(低位元) #define SEG7P P0 // 7节显示器(g~a)输出埤 unsigned char code TAB[17]= // 共阳7节显示器(g~a)编码 { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 数字0-4 0x92, 0x82, 0xf8, 0x80, 0x98, // 数字5-9 0xa0, 0x83, 0xa7, 0xa1, 0x84, // 字母a-e(10-14) 0x8e, 0xbf}; // 字母F(15),负号(-) unsigned char disp[4]={ 0xbf, 0xbf, 0xbf, 0xbf }; // 显示阵列初值为负号(-) unsigned char scan[4]={ 0xef, 0xdf ,0xbf ,0x7f }; // 7显示器及键盘之扫瞄码 void delay1ms(int); // 声明延迟函数 void scanner(void); // 声明扫瞄函数 //==主程序================================================ main() // 主程序开始 { while(1) // 无穷回圈,程序一直跑 scanner(); // 扫瞄键盘及显示7段显示器 } // 主程序结束 // === 延迟函数,延迟约x*1ms ================================ void delay1ms(int x) // 防弹跳函数开始 { int i,j; // 声明整数变数i for(i=0;i } // 防弹跳函数结束 // ======= 扫瞄4*4键盘及4个7节显示器函数 ================ void scanner(void) // 扫瞄函数开始 { unsigned char col,row,dig; // 声明变数(col:行,row:列,dig:颢示位) unsigned char rowkey,kcode; // 声明变数(rowkey:列键值,kcode:按键码) for(col=0;col<4;col++) // for回圈,扫瞄第col行 { KEYP = scan[col]; // 高4位输出扫瞄信号,低4位元输入列值 SEG7P = disp[col]; // 输出第col行数字 rowkey= ~KEYP & 0x0f; // 读入KEYP低4位,反相再清除高4位求出列键值 if(rowkey != 0) // 若有按键 { if(rowkey == 0x01) row=0; // 若第0列被按下 else if(rowkey == 0x02) row=1; // 若第1列被按下 else if(rowkey == 0x04) row=2; // 若第2列被按下 else if(rowkey == 0x08) row=3; // 若第3列被按下 kcode = 4 * col + row; // 算出按键之号码 for(dig = 0; dig < 3 ; dig++) // 显示阵列之左3字 disp[dig]=disp[dig+1]; disp[3]=TAB[kcode]; while(rowkey != 0) rowkey=~KEYP & 0x0f; } delay1ms(4); } } 电路仿真图: // 将右侧编码左移1位 // 键值编码後,写入最右侧 // 当按钮未放开 // 再读入列键值 // if叙述(有按键时)结束 // 延迟4ms // for回圈结束(扫瞄col行) // 扫瞄函数scanner()结束 P00P01P02P03P04P05P06P07U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617Y0Y1Y2Y3A0A1A2A312345678A3A2A1A0RN1161514131211109RX8Y3P00P01P02P03P04P05P06P0718XTAL2A0A1A29RSTA3R110k293031PSENALEEAY2R210k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51Y1R310kY0R410kX0X1X2U2:A1740423U2:B474045U2:C6740413U2:D127404R510kR610kR710kR810kA0A1A2A3X3 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务