/*
当串口调试助手发送a时执行5ms流水灯功能,
当串口调试助手发送b时执行50ms流水灯功能
*/
#include <reg52.h>
#include<intrins.h> //位移头文件_crol_
#define uchar unsigned char
unsigned char flag,i;
sbit wei1=P2^4;//定义第一位LED显示器
sbit wei2=P2^5;//定义第二位LED显示器
sbit wei3=P2^6;//定义第一位LED显示器
sbit wei4=P2^7;//定义第二位LED显示器
char w='0';
char wu[15];
int k=0;
int q=0;
void receive() interrupt 4 //串口中断服务程序
{
if(RI==1){
RI=0; //重新清0等待接收
w=SBUF;//接收电脑传输过来的数据
wu[k]=w; //将W的值赋给wu数组
k++;
SBUF=w;//单片机把接收到的数据返回给电脑
TI=0; //清除发送中断标志位
}
}
//P0共阴极数码管编码表 //****(用P0=)表示;【在显示屏上显示数字(字母)1——F——不显示】
uchar code gy[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //***高电平“1”亮
void init(){
SCON=0x50;//串口控制寄存器,等价于SM0=0,SM1=1,SM2=0,串口方式一通信
TMOD=0X20; //设置定时器1为模式2,做为波特率发生器,8位初值自动重装的8位定时器,定时到TH1的值自动装到TL1
TH1=0xfd;//设置波特率为9600
TL1=0xfd;
REN=1;//允许串口接收中断?
EA=1;//开全局中断
ES=1;//串口中断允许
TR1=1; //启动波特率发生器
}
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void display (uchar ,uchar);
void main()
{
init();
wei1=1;
wei2=1;
wei3=0;
wei4=0;
while(1)
{
if(w=='\n') //当发送了新行时,
{
k=0; //数组里的元素清零
for(q=0;q<20;q++)
{
wu[q]=0;
}
q=0;
}
// if(wu[0]=='6'&&wu[1]=='6')
// {
// k=0; //数组里的元素清零
// while(1)
// {
// P0=0x7d;
// }
// }
if(wu[0]=='9'&&wu[1]=='8')
{
k=0; //数组里的元素清零
while(1)
{
P0=0x00;
wei1=0; //第一个显示屏不亮
wei2=1; //第二个显示屏亮
P0= 0x7f; //显示数字‘9’
delay(1); //延迟一毫秒
wei1=1; //第一个显示屏亮
wei2=0; //第二个显示屏不亮
P0= 0x6f; //显示数字‘8’
delay(1); //延迟一毫秒
}
}
}
}
51单片机基础——串口发送98,数码管显示98
最新推荐文章于 2024-05-18 16:54:39 发布
该程序实现了通过串口调试助手控制单片机执行不同频率的流水灯功能。当接收到字符'a'时,启动5ms的流水灯效果;接收到'b'时,启动50ms的流水灯效果。程序中定义了四位LED显示器,并使用中断服务程序处理串口接收,同时包含了数码管显示的相关代码。
摘要由CSDN通过智能技术生成