问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样将51单片机实验板的按键信号传给PC啊。比如按一个键,51给PC发送一个'a'字符。

发布网友 发布时间:2022-05-13 19:48

我来回答

3个回答

热心网友 时间:2023-10-23 22:28

同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;

1::::::::::::::
#include <REG52.H>
bit Flag;
unsigned int R_D,S_D;
unsigned char i;
void usart_init(void); ///串口初始化

void main (void) {
usart_init(void); ///串口初始化

while(1)
{
if (Flag==1)
{
SBUF = S_D; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
Flag=0;
}
}
}

}

void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
R_D = SBUF; //SUBF接受/发送缓冲器
S_D=R_D;///////返回PC发送
Flag=1;
}
}
void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
}
2:::::::::::::

#include <REG52.H>

sbit p34=P3^4;////////定义一个按键

bit Flag=1;

unsigned int S_D;
unsigned char i;
void usart_init(void); ///串口初始化
void delay (unsigned int Z) ; //延时程序 Z倍 MS

void key_p34(void) ; /////按键检

void main (void) {
usart_init(void); ///串口初始化
key_p34(void) ; ////上电后检测一次按键的状态
if (Flag==1)//上电后发送一次按键的状态
{
SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
else
{
SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}

while(1)
{

key_p34(void) ;
if (Flag==1)
{
SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}
else
{
SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI);// 等特数据传送(TI发送中断标志)
TI = 0;// 清除数据传送标志
}

}

}

void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
}
void delay (unsigned int Z)//延时程序 Z倍 MS
{
unsigned int x,y;
for(x=Z;x>0;x--)
for(y=110;y>0;y--) ;
}
void key_p34(void) /////按键检测
{
if(p34==0)
{ delay(10);
if(p34==0)
{
while(!p34) ;/////等待按键松手
Flag=0;
}
}

}
不懂得欢迎交流

热心网友 时间:2023-10-23 22:28

我给你段程序,我写的,还有上位机的,一个数据采集与控制的,有你需要东西,这里有照片http://www.baidu.com/p/tm790116?from=super
..........
这是初始化程序
;--------------------------------------------------
; 初始化程序
;--------------------------------------------------
CSH: NOP
NOP
MOV R0,#38H
MOV R1,#8
MOV A,#00H
CSHH: MOV @R0,A
INC R0
DJNZ R1,CSHH
MOV 20H,#0FFH ;按键数据
MOV 2DH,#0FFH ;输出控制
MOV 4FH,#01H ;本机地址号
MOV 40H,#01H ;查询指针
;----------串口初始化----------
;定时器工作设置
MOV TMOD,#20H;T1为模式2
MOV TH1,#0F3H;波特率为2400
MOV TL1,#0F3H
;串口设置
MOV SCON,#50H;UART工作在MODE1,SM1=1 REN=1
;程序参数初始化
SETB TR1
MOV IE,#100100000B
SETB ES
SETB EA
SETB TR1

JMP ZCX
MOV P2,#00H
MOV R3,#00
MOV 49H,#1DH
CS2: MOV R0,#30H
MOV 48H,#08H
CS1: NOP
MOV A,R3
MOV @R0,A
INC R0
DJNZ 48H,CS1
MOV 4AH,#70H
CS3: NOP
CALL DSPLAY
DJNZ 4AH,CS3
INC R3
DJNZ 49H,CS2
MOV 30H,#0AH
MOV 31H,#19H
MOV 32H,#08
MOV 33H,#09
MOV 34H,#0CH
MOV 35H,#05
MOV 36H,#02
;--------------------------------------------------
; 主程序程序
;--------------------------------------------------
ZCX: NOP ;
CALL DSPLAY ;调用显示子程序
CALL CXCX ;调用查询子程序
NOP ;
JNB P3.7,BDYX ;本地还是远程控制
JMP ZCX1 ;
BDYX: NOP ;JNB P3.7,BDYX
CALL KEY ;本地是否有按键动作
MOV P1,20H ;
CALL BJ ;高用比较子程序
ZCX1: JMP ZCX

...............
这是串口发通信子程序
;-----------------------------------------------
;串口中断处理程序
;-----------------------------------------------
CKZD: NOP ;串口中断
CLR EA
JBC RI,UART ;
CLR TI ;
JMP FSCX ;
UART: MOV R6,#07 ;接收八位数据
MOV R0,#50H ;
TXCL: CLR RI ;
MOV @R0,SBUF ;第一位数 是否为本机地址,是则接收数据,不是则退出
MOV R3,#250 ;是否是干扰信号是则退出
TXYS1: MOV R4,#250 ;
TX1: JB RI,TX2 ;
DJNZ R4,TX1 ;
DJNZ R3,TXYS1 ;
JMP UARTCK11 ;
TX2: INC R0 ;
MOV @R0,SBUF ;数据存入50-57H
CLR RI ;
DJNZ R6,TX1 ;
MOV A,50H
CJNE A,#1BH,UARTCK11 ;联络信号
MOV A,4FH ;50H为本机地址号
CJNE A,51H,UARTCK11 ;判断是否为本机,是则下行,不是则放弃处理
MOV A,52H ;第一位数为指令
CJNE A,#01H,UART1 ;指令为1是显示复制子程序
CALL XSFZ ;显示复制子程序
JMP UARTCK11 ;
UART1: CJNE A,#02H,UART2 ;
MOV 54H,2DH ;
JMP FSCX ;
UART2: CJNE A,#03H,UART3 ;
MOV 20H,54H ;
MOV 2DH,54H
JMP UARTCK11 ;
UART3:
UARTCK11: SETB EA
RETI
还有什么问题,可以加我,291918938

热心网友 时间:2023-10-23 22:29

用串口通信,在主程序里加键盘检测,检测到按下之后就发送给PC
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑显示器优泒,AOC,飞利浦哪个显示色彩较好 想买超薄的显示器,优派好还是飞利浦好? 优派和飞利浦哪一个更好用 我和我女友热恋两个月了,但是她总是嫌弃我。而且她专插本考上了本科... ...岁我喜欢一个女孩但不知道改制面和他说谁能帮帮我啊求求大家了 我... 我该怎么追她 谁能帮帮我 ...有能理解我的话的么,谁能帮我分析下我和他的现状, 头大,头发少,头顶尖适合发型? 大脸头发少的适合什么发型 头大脸圆,头发比较少柔软,剪什么发型会好看 单片机外部地址 单片机 MX485 关于51单片机12864程序的问题 有关单片机地址和波特率的问题 让单片机有4种波特率可选 还有让其自己读取自己的地址 有关单片机读取波特率和地址 void wx() { cs2=0; wr=0; wr=1; cs2=1; } void dx() { cs1=0; ... 单片机12864数据刷新率怎么设置 片选信号CS0 CS1 CS2这些是什么意思啊? 而且为什么片选逻辑要相加起来啊? 单片机 数码管 显示 单片机连接共阳极数码管位选端接三极管有什么意义? 求大神指点亚龙YL236上面的LCD12864详细的操作方法(就是带CS1、CS2的那种,无字库) 原理图中单片机图上有个vss是什么意思??接地么??? 谁有12864zw和8051单片机的连线图,还有就是问下cs1 和cs2分别是什么口? 请问这个单片机原理图怎么看它的段选和位选?十分感谢。 .单片机CS1语言源程序从()开始执行。每个C语言程序必须()有? 怎样查到河池天峨每日天气情况 江苏省昆山市有截拳道培训中心吗? 上海截拳道培训班哪家好 中国哪里有学截拳道的地方? 国内的李小龙截拳道教练谁教的最好了? 单片机12864如何读取?? 怎么把肉炒的干煸一点 蒜苔炒肉把肉炒干点怎么做 如何把肉炒干 怎么干炒肉啊 想做面包买了烤箱,想知道做最简单的面包都需要什么,就是,做面包必须要用到的都是什么?谢谢! 学计算机网络技术有前景吗 为什么别人加我微信我收不到请求,我加别人他也没收到? 为什么别人添加我微信知道我的名字和住址? 怎么样设置电脑密码才能在你离开几秒就会制动锁住呢? ipod nano7开了蓝牙后,我用iPhone搜不到,如何解决?在线等。 ipod nano7的蓝牙怎么连不上车载音响啊 ipod nano7怎么用itunes传歌 世界作品中三大吝啬鬼指? 上海泰优汇典当有限公司怎么样? Y两优973谷种问题 哪里有在买Y两优1号稻种 村委会怎么开上户证明 村委会开的接收户口的证明 村委会可以开具哪些证明