#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0; sbit LED2=P0^3; sbit K1=P1^0; void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } void putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } void main() { uchar Operation_No=0; SCON=0x50;//设置串行口工作方式为1 TMOD=0x20;//设置定时器、计数器工作方式2 PCON=0x00;//设置SMOD=0 TH1=0xFD;//装载定时器初值,波特率为9600bps TL1=0xFD; TI=0;//发送中断标志位置0 TR1=1;//启动T1 while(1) { if(K1==0) { while(K1==0);//未松手则程序将停在这里不向向下执行 Operation_No=(Operation_No+1)%4; } switch(Operation_No) { case 0:LED1=LED2=1;break; case 1:putc_to_SerialPort('A'); LED1=~LED1;LED2=1;break; case 2:putc_to_SerialPort('B'); LED2=~LED2;LED1=1;break; case 3:putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1;break; } Delay(100); } }
时间: 2023-06-17 16:04:23 浏览: 105
按矩阵键盘显示平方#include<reg52.h>
4星 · 用户满意度95%
这是一段基于 8051 单片机的程序,实现了通过按键控制 LED 灯的闪烁,并通过串口输出字符 A、B、C,同时实现了波特率为 9600bps 的串口通信。其中,按键控制使用了轮询的方式,对按键进行检测,每次按键按下后 Operation_No 会自增 1,并通过取余操作实现了循环计数。在 switch-case 结构中,根据 Operation_No 的值来选择执行相应的操作:当 Operation_No 为 0 时,LED1 和 LED2 都会亮;当 Operation_No 为 1 时,输出字符 A,LED1 会闪烁;当 Operation_No 为 2 时,输出字符 B,LED2 会闪烁;当 Operation_No 为 3 时,输出字符 C,LED1 和 LED2 会交替闪烁。程序中还使用了一个 Delay 函数,实现了一定时间的延迟。
阅读全文