51单片机普通IO口模拟串行口之查询方式
完整程序工程源代码:点击下载
主程序:
#include reg51.h>#include "delay.h"#include "sub4094.c"#include intrins.h>sbit spk = P2^5; //定义蜂鸣器使用的I/O口P2.5sbit LED = P2^7;#include "subuart2.c"void main (void){unsigned char first,zjgs,order,zhen_xh,jym,end; //定义起始字、字节个数、命令码、帧序号、校验码、结束字unsigned char i; //定义1个随机变量unsigned char sum; //定义单片机计算用的校验码unsigned char LED_contrl; //指示灯控制字unsigned contrl_1,contrl_2; //移位变量//unsigned int delay_counter;P5=0xEF; //使能流水灯,屏蔽数码管P4=0x00; //流水灯全部点亮 update4094(); //刷新流水灯状态delay_ms(300);P4=0xFF; //流水灯全部熄灭update4094(); //刷新流水灯状态while(1){first=getchar2(); //读取6个数据进行处理。 zjgs=getchar2();order=getchar2();zhen_xh=getchar2();jym=getchar2();end=getchar2();if(0xfa != first) goto end;sum=zjgs+order+zhen_xh;if(sum != jym) {putchar2(0xfa); //起始字putchar2(0x07); //字节个数sum=0x07;putchar2(order); //接收到的命令码sum+=order;putchar2(zhen_xh); //接收到的帧序号putchar2(0x00); //命令校验错误标志位sum+=zhen_xh;putchar2(sum); //校验码putchar2(0xfb);//蜂鸣器发出报警声音,指示灯闪烁for(i=0;i8;i++) {LED=~LED; //取反指示灯spk=~spk; //取反蜂鸣器delay_ms(200); }goto end;} if(0xfb != end) goto end;switch(order){case 1: //将收到的命令返回给串行口LED=0;putchar2(first); //起始字 putchar2(zjgs); //字节个数 putchar2(order); //命令码putchar2(zhen_xh); //帧序号putchar2(jym); //校验码putchar2(end); //结束字delay_ms(50);LED=1;//流水灯效果 循环右移P4=0xff; //熄灭所有指示灯update4094();LED_contrl=0x01; //初始化指示灯控制字节delay_ms(50); //延时300MSfor(i=0;i8;i++){P4=~LED_contrl; //点亮控制字节相应指示灯update4094();delay_ms(50);LED_contrl=1;}P4=0xff; //熄灭所有指示灯update4094();break;case 2: //将收到的命令返回给串行口putchar2(first); //起始字 putchar2(zjgs); //字节个数 putchar2(order); //命令码putchar2(zhen_xh); //帧序号putchar2(jym); //校验码putchar2(end); //结束字//流水灯效果 从左到右逐个点亮P4=0xff; //熄灭所有指示灯update4094();LED_contrl=0xff; //初始化指示灯控制字节delay_ms(50);for(i=0;i8;i++){LED_contrl=1;P4=LED_contrl;update4094();delay_ms(50);}break;case 3: //将收到的命令返回给串行口putchar2(first); //起始字 putchar2(zjgs); //字节个数 putchar2(order); //命令码putchar2(zhen_xh); //帧序号putchar2(jym); //校验码putchar2(end); //结束字//流水灯效果 循环对撞P4=0xff; //熄灭所有指示灯update4094();contrl_1=0x02; //初始化移位变量1contrl_2=0x80; //初始化移位变量2delay_ms(50);for(i=0;i8;i++){LED_contrl=contrl_1|contrl_2;P4=~LED_contrl; //点亮控制字节相应指示灯update4094();delay_ms(50);contrl_1=1; //移位变量1左移1位contrl_2>>=1; //移位变量2右移1位} P4=0xff; //熄灭所有指示灯update4094();break;default:break;}end:;}}
51单片机相关文章:51单片机教程
单片机相关文章:单片机教程
单片机相关文章:单片机视频教程
单片机相关文章:单片机工作原理
蜂鸣器相关文章:蜂鸣器原理
评论