《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
case 1: KeyNo=0;break; case 2: KeyNo=1;break; case 4: KeyNo=2;break; case 8: KeyNo=3;break; default:KeyNo=16; //无键按下 }
P1=0xf0; //低4位置0,放入4列 DelayMS(1);
Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值
switch(Tmp) //对0~3行分别附加起始值0,4,8,12 {
case 1: KeyNo+=0;break; case 2: KeyNo+=4;break; case 4: KeyNo+=8;break; case 8: KeyNo+=12; } } //蜂鸣器 void Beep() {
41
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
uchar i;
for(i=0;i<100;i++) {
DelayMS(1); BEEP=~BEEP; } BEEP=0; } //主程序 void main() {
P0=0x00; BEEP=0; while(1) {
P1=0xf0;
if(P1!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) {
P0=~DSY_CODE[KeyNo]; Beep();
Pre_KeyNo=KeyNo; }
42
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
DelayMS(100); } }
18 开关控制LED
/* 名称:开关控制LED 说明:开关S1和S2分别控制LED1和LED2。 */
#include
while(1) {
LED1=S1;
43
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
LED2=S2; } }
19 继电器控制照明设备
/* 名称:继电器控制照明设备
说明:按下K1灯点亮,再次按下时灯熄灭 */
#include
#define uchar unsigned char #define uint unsigned int sbit K1=P1^0; sbit RELAY=P2^4; //延时
void DelayMS(uint ms) {
uchar t;
while(ms--)for(t=0;t<120;t++); } //主程序
44
《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例
void main() {
P1=0xff; RELAY=1; while(1) {
if(K1==0) {
while(K1==0);
RELAY=~RELAY; DelayMS(20); } } }
20 数码管显示拨码开关编码
/* 名称:数码管显示拨码开关编码
说明:系统显示拨码开关所设置的编码000~255 */
#include
45