#include <reg51.h>
#include <intrins.h>
unsigned char tmp;
void send_char(unsigned char txd);
void delay(unsigned int k);
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key21 = P2^1; // 限位开关1 zgf
sbit key22 = P2^2; // 限位开关2 zgf
四路继电器分别在P10,P11,P12,P13口
限位开关接P21,P22口,另一头接GND
初始化
void uart_init(){
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1 IE = 0x0;// 禁止任何中断
ES = 1; //打开接收中断
EA = 1; //打开总中断
}
原先IE=0x0仅四路开关,禁止中断
主程序
main(){
uart_init();
P1 = 0xFF; //P1口8个口线全为1也就是高电平,P10 P11 P12 P13 P14 P15 P16 P17
while(1){
if(key21 == 0){ //zgf
delay(20); //延时20ms 消除抖动
if(key21 == 0){ //第二次判断
key3 = 1;
tmp = 3;
}else {
key3 = 0;
} //while(!key21); //当按键未松开时,key21为0,执行该死循环。
}
if(key22 == 0){ //zgf
delay(2

最低0.47元/天 解锁文章
1100

被折叠的 条评论
为什么被折叠?



