用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串口接收区能收到1

作者&投稿:笃平 (若有异议请与网页底部的电邮联系)
用51单片机怎么通过独立按键实现串口通信~

这个是单片机双机通讯,其实很简单,关注这个公众号吧,单片机仿真,里面有。其实大致思路就是按键按下一个单片机发送数据到串口,另外一个单片机配置串口中断,你在中断里放一个buf,让他收到一个字节自加一就可以了。

如果这两个功能都是一个死循环,可以考虑用中断,这样就不必在两个独立的功能中插入按键检测了
while(1)
{
while(flag==1){死循环1}
while(flag==2){死循环2}
}
如果这两个功能不是死循环,就 简单了
while(1)
{
if(key1==0) {延时消抖 功能1}
if(key2==0) {延时消抖 功能2}
}

用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

首先你必须要做一个串口通讯程序,然后扫描端口,把扫描到的端口编码发送出去就可以了

#include<reg52.h>
#include<reg52.h>

sbit Key0_IN = P1^0;
sbit Key1_IN = P1^1;
sbit Key2_IN = P1^2;
sbit Key3_IN = P1^3;
sbit Key4_IN = P1^4;
sbit Key5_IN = P1^5;
sbit Key6_IN = P1^6;
sbit Key7_IN = P1^7;
//
unsigned char UARTByte;
unsigned char MACByte;
unsigned char Cont;
const unsigned char code UART_TABLE1[]={1,};
const unsigned char code UART_TABLE2[]={2};
const unsigned char code UART_TABLE3[]={3};
const unsigned char code UART_TABLE4[]={4};
const unsigned char code UART_TABLE5[]={5};
const unsigned char code UART_TABLE6[]={6};
const unsigned char code UART_TABLE7[]={7};
const unsigned char code UART_TABLE8[]={8};
//
void UART_Send_Byte(unsigned char Byte);
//?óê±
void Delay_1ms(unsigned int time)
{
unsigned int a, b;
for(a=time; a>0; a--)
for(b=110; b>0; b--);
}

int main(void)
{
unsigned char i;
SCON=0X50;
TMOD=0X20;
PCON=0X00;
TH1=0XFD;
TL1=0XFD;
ES=1;
EA=1;
TR1=1;

while(1)
{
MACByte=P1;
if(MACByte!=0xFF)
{
MACByte=P1;
switch(MACByte)
{
case 0xFE: Cont = 1;break;
case 0xFD: Cont = 2;break;
case 0xFB: Cont = 3;break;
case 0xF7: Cont = 4;break;
case 0xEF: Cont = 5;break;
case 0xDF: Cont = 6;break;
case 0xBF: Cont = 7;break;
case 0x7F: Cont = 8;break;
default : Cont = 0;break;
}
for(i = 0; i < 2; i++)
{
if(Cont == 1)
UART_Send_Byte(UART_TABLE1[i]);
else if(Cont == 2)
UART_Send_Byte(UART_TABLE2[i]);
else if(Cont == 3)
UART_Send_Byte(UART_TABLE3[i]);
else if(Cont == 4)
UART_Send_Byte(UART_TABLE4[i]);
else if(Cont == 5)
UART_Send_Byte(UART_TABLE5[i]);
else if(Cont == 6)
UART_Send_Byte(UART_TABLE6[i]);
else if(Cont == 7)
UART_Send_Byte(UART_TABLE7[i]);
else if(Cont == 8)
UART_Send_Byte(UART_TABLE8[i]);
}

Delay_1ms(1000);
}
}
}

void UART_Send_Byte(unsigned char Byte)
{
ES = 0;
TI = 0;
SBUF = Byte;
while(!TI);
TI = 0;
ES = 1;
}

void UART_IRQ(void) interrupt 4
{
if(RI)
{
UARTByte = SBUF;
RI = 0;
}
}


51单片机中如何通过一个按键实现暂停与恢复?需要一个编程的思想_百度知 ...
51单片机中如何通过一个按键实现暂停与恢复?需要一个编程的思想  我来答 1个回答 #热议# 在购买新能源车时,要注意哪些?惠企百科 2022-12-11 · 百度认证:北京惠企网络技术有限公司官方账号 惠企百科 惠企百科网是一家科普类综合网站,关注热门中文知识,集聚互联网精华中文知识,本着自由开放、分享价值的...

用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串 ...
用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

51单片机如何通过315M超再生模块实现无线传输。
2、建议使用专业的编码与解码芯片,或者采用MCU的普通口实现模拟的编码解码,不过这个很难做到良好的通信信道,也就是说会有干扰。而硬件的就不会,推荐PT2262和PT2272。3、此款芯片也有他的不足,最大只能做到6位的数据通信,对于正常的8位通信有些麻烦,却也不影响什么。举个例子来说此芯片编解码:...

51单片机中如何通过一个端口高低电平,控制另外端口的高低电平? C语言程...
if(k) P2=1;\/\/如果端口为1,P2置1 else if(k==0) P2=0;\/\/否则,如果端口为0,P2置0

51单片机怎么通过一个管脚控制另一个管脚?
是引脚,不是管脚。行列式键盘,就是这种控制方法。去掉按键,把引脚直接连在一起,即可。

各位大神,请问怎么用51单片机,通过继电器来控制220V的电磁水阀的开与...
给你个简单程序参考一下 include <reg51.h> sbit DCF P1^0;\/\/控制电磁阀,低电平有效 sbit shuiwei P1^1;\/\/水位开并低电平有效 void main(void){ while(1){ if(shuiwei == 0)\/\/如果水位开关接低电平 { delayms(20);if(shuiwei == 0)DCF = 0;\/\/电磁阀接通;} else DCF = 1;\/\/...

51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
char i;sbit k1=P3^6; \/\/启动按键 sbit k2=P3^7;\/\/停止按键 bit s=0; \/\/ 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; \/\/LED灯的数组 void delay1s(void); \/\/延时函数 void liushuideng(); \/\/流水灯的循环 void main(){ led=~0xff;k1=1;whi...

51单片机怎么把多个传感器(比如3个)采集到的数据传给PC
51单片机和PC机通讯一般是通过RS232串行通讯接口来实现的,多个传感器检测到的信号可以分别传送到PC机。1,传感器是数字量,那么每一个IO口都可以接受其输入,这样的话,少于8个的传感器可以组合成一个字节通过串口传给PC。2、传感器是模拟量,,那么需要进行AD转换,STC系列单片机大部分型号都带AD功能,不...

51或AVR单片机如何通过USB接口与电脑上的程序通信
首先,单片机和微机通信的电气标准要一致,微机串口一般是RS232电气标准,所以要加电平转换芯片,大多用MAX232,一般单片机实验板上都提供这样的标准串口。其次,要分别编写上位机和下位机软件程序,单片机程序参照例程、教科书进行编写;上位机微机可采用VB,组态软件,Labview等软件编写,一般若是简单的通信,...

51单片机怎么实现数据的存储,通过51单片机可以把数据存到哪,没学过usb...
一般可以存在,单片机的flash里,flash本来是用来存放程序的,但是如果程序没那么大,可以存在flash的末尾。具体代码怎么实现,可以查阅一下资料,我就不详细描述了。存flash 的时候要注意的地方有几点:1,flash的擦写次数有限制,所以不要频繁储存 2,擦除flash的时候不要把代码擦除了!还有一种方法是...

江门市19395919703: 用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串口接收区能收到1 -
集斌海超: 首先你必须要做一个串口通讯程序,然后扫描端口,把扫描到的端口编码发送出去就可以了

江门市19395919703: 按键控制单片机实现串口通信 -
集斌海超: 先设定8个按键标志位, 再进行按键扫描,开机,关机,暂停,继续四个功能通过短按和长按区分,当检测到按键按下后,将相应的标志位置1,向串行输入口RXD发送命令后再将标志位清零. 按键扫描可以采用定时器中断定时扫描. 按键时间长短控制,当检测到有键按下时暂停定时器,延时判断长短按键,再打开定时器,继续...

江门市19395919703: 51单片机独立按键怎么控制3个独立程序(有独立头文件的程序) 程序我写好了 不知道怎么串接 -
集斌海超: 把三个独立的程序,写成3个子程序,都放在一个程序中,在主程序中,判断3个按键,当按下3个按键后,分别执行相应的子程序就行了.

江门市19395919703: 急求AT89C51单片机用按键控制输入串行数码管显示程序 -
集斌海超: SBUF=dispcode[num0];//第1位 while(!TI); TI=0; led0=0; delay(2); led0=1; SBUF=dispcode[num1];//第2位 while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[num2];//第3位 while(!TI); TI=0; led2=0; delay(2); led2=1;

江门市19395919703: AT89C51单片机如何编程实现串转并? -
集斌海超: 很好处理呀,接受串行信号,直接赋值给一个P口就可以了. #include<reg51.h> main() { unsigned char dat; TMOD=0x20; TH1=TL1=0xfd; TR1=1; while(1){if(RI){RI=0;dat=SBUF;P0=dat;}} }

江门市19395919703: 用51单片机的10做10个按键和串口控制一盏灯的亮和灭. -
集斌海超: 写程序就算了,给你思路吧.P0口和P1.0\P1.1所做的按键按下时,都做同一件事,比如:sbit SW7=P1^1; sbit LED=P1^3; bool led_flag; if(!SW7) //按键7被按下 { led_flag=~led_flag; //将灯亮灭标志位取反 while(!SW7); //等待松开按键 } 而在主函数mian中还有一个灯亮灭的函数 led() { if(led_flag) //如果是灯灭的指令,则延时3秒,再将灯引脚电平翻转 Delay3s(); LED=led_flag; } 串口的不多说了.做的事情都是一样的

江门市19395919703: 如何用51单片机同时控制键盘,显示屏 ,串口通讯 -
集斌海超: 思路: 1、键盘在主程序中完成,当然硬件设计了外部中断,也可以用外部中断完成. 2、你使用动态显示,用定时器中断完成. 3、如果不跟其它设备或计算机通讯,不要使用串口中断.

江门市19395919703: 51单片机两程序独立按键切换连接程序怎么写? -
集斌海超: 两段程序还是要合并成一个主程序的,只是分开成两段而已. sbit ins1=独立按键所在I/O脚; bit keyab=0; //区分执行A,B程序的标志位,=0,执行A段,=1执行B段 main() { ........... while(1) //while前的程序照常写 { if(ins1==0) { keyab=!keyab; while(ins1==0); } if(keyab==1) { A段程序写在这里 } else { B段程序写在这里 } } } 这样写后,原来A、B程度中的while(1)就不能再写了.而是将while(1)以下程序写到这里.

江门市19395919703: 51单片机独立按键,怎么组合实现某个功能 -
集斌海超: 配合显示器选择不同的功能.如:按键启动选择功能,显示器依次显示1,2,3....表示功能,每个数字显示10秒,等待按键确认,进入下一个菜单.循环显示2次,没有接收到确认按键,自动退出此模块,返回上一层菜单.

江门市19395919703: 单片机的独立按键 -
集斌海超: 51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平. 思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻, 现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻. 编程 时 只要用 检测 高 低 电平 来判断是否 有 按键 按下 就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网