51单片机(CC2530)发送按键次数到串口助手显示 实现功能:按1次按键 串口助手显示1 再按一次 显示2 以此

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机(CC2530)发送按键次数到串口助手显示 实现功能:按1次按键 串口助手显示1 再按一次 显示2 以此相关的知识,希望对你有一定的参考价值。

/****************************************************************************
* 描 述: 设置串口调试助手波特率:115200bps 8N1
* 会收到CC2530发过来的按键次数
****************************************************************************/
#include <ioCC2530.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;

//#define COUNT "Hello World! "
#define KEY_ADD P0_1 // P0.1口控制S1
//#define TX_SIZE 20
//char TxData[TX_SIZE]; //存储发送字符串

/****************************************************************************
* 名 称: DelayMS()
* 功 能: 以毫秒为单位延时 16M时约为535,32M时要调整,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大延时越久
* 出口参数: 无
****************************************************************************/
//设置按键相应的IO口
void InitKey(void)

P0SEL &= ~0x02; //设置P0.1为普通IO口
P0DIR &= ~0x02; //按键接在P0.1口上,设P0.1为输入模式
P0INP &= ~0x02; //打开P0.1上拉电阻


//按键计数
uchar keyscan (void)

uchar num=0;
KEY_ADD=1; //按键输入端口电平置高
//KEY_DEC=1;
while (1) //主循环

if(!KEY_ADD) //如果检测到低电平,说明按键按下

DelayMS(10); //延时去抖,一般10-20ms
if(!KEY_ADD) //再次确认按键是否按下,没有按下则退出

while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待

//if(num<9) //加操作
num++;



return num;


void InitUart(void)



void UartSendString(uchar a)


U0DBUF = a;
while(UTX0IF == 0); //等待发送数据完成
UTX0IF = 0; //清除发送完成标志位


/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)

uchar count =0; //按键次数
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

InitKey(); //设置按键相应的IO口
InitUart(); //调置串口相关寄存器
count = keyscan (); //获取按键次数

while(1)

UartSendString(count); //串口发送数据
DelayMS(1000); //延时



不知道哪儿出错了,没有报错,串口助手什么都不显示,请大神指点....

你先一步一步的实验,单独的进行按键测试,先按键跟数码管一起,按键按一下,数码管数值加1,看看是不是达到你想要的目的,然后,进行串口通信, 串口助手发送,单片机接收,然后单片机发送一个数值给串口助手。 两个都完成,然后再结合到一起去, 我不知道你的程序有什么问题,但是尽量不要用delay函数,可以用定时器进行按键的扫描 和 串口定时发送数据 参考技术A while(1)  //无限循环

UartSendString(count); //串口发送数据
DelayMS(1000); //延时


串口,不停发送数据 ?
发送的,都是什么数字?

STC学习:串口通信

程序设计目标及程序运行效果说明
程序设计目标:本实验实现的是红外单工方简单上下位机串口数据的发送与接收。单片机通过按键2、3调整发送的数据(0~F),按键1控制数据发送给上位机,并在串口助手的接收数据缓存区显示;上位机设定发送缓存区数据发送数据给单片机单片机将值显示在数码管。
程序运行效果说明:上位机向单片机发送数据:在发送缓冲区显示要发送的数据,按下按键1数据发送到单片机,并在数码管上显示相应的数据;下位机向上位机发送数据:在单片机数码管上显示要发送的数据,可以通过按键2、3进行调整,按下按键1数据发送到上位机,在接受缓冲区显示接收到的数据。
程序相关电路及工作原理说明

1.电路工作原理
单片机集成了USB转串口模块,对应使用RXD线接收数据,用TXD发送数据。每个串口由2个数据缓冲器(相互独立1收1发)、一个移位寄存器(一字节数据一位一位发送出去)、一个串行控制器和一个波特率发生器(这个比较重要,结合相关的定时器)组成。对应发送、接收数据完成(RI、TI硬件置1)都会触发串口中断,但是无法确定是哪个触发的,所以在串口中断中我们要判断是接收数据产生的中断还是发送数据产生的中断,对于发送数据产生的中断,我们要软件将TI清0,并将数据就绪标志清0,允许下一字节数据发送,发送数据函数中通过while循环,等待发送数据准备就绪,完了将就绪的数据复制给SBUF;对于接收数据产生的中断,我们要软件将RI清0,并从SBUF中读取数据。
2.RS232通信原理
RS是“推荐标准”的缩写,232为标识号,C表示修改次数。标准设有25条信号线,包括一个主通道和一个辅助通道。通常 RS-232 接口以9个引脚(DB-9) 或是25个引脚 (DB-25) 的型态出现。
串口通信的传输格式:串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一位一位的传输。示波器读数时,左边是数据的高位。

测试方法
(1)按照“工程建立及下载到开发板整个流程指导.doc”文件将当前目录的Hex文件下载到开发版;
(2) 默认最左边数码管显示00;
(3)程序下载完后默认是留在“程序文件”界面,我们点击“串口助手”选项,对串口、波特率、校验位、停止位进行设置,因为本实验是8位波特率可变的串口通信,所以无需设置校验位、停止位,本实验采用的波特率是9600;
(4) 点击“打开串口”按钮,打开串口;
(5) 设置完后选择“文本模式”或者“HEX模式”,进行数据的发送与接收。
(6)在发送缓存区输入“05”,点击“发送数据”按钮,完成上位机向单片机发送数据,在单片机数码管上显示数字“05”;
(7)通过key2或者key3调整数值(数码管会显示出来)如“0c”,按下key1,完成单片机向上位机发送数据;此时在接收缓冲区显示“0c”。

以上是关于51单片机(CC2530)发送按键次数到串口助手显示 实现功能:按1次按键 串口助手显示1 再按一次 显示2 以此的主要内容,如果未能解决你的问题,请参考以下文章

如何使用串口调试工具收发cc2530串口数据?

CC2530 串口收发字符串

CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭

cc2530属于啥单片机

各位,请问有没有支持CC2530的点对点通信的zigbee例程呢? 谢谢

求各种ZIGBEE射频芯片对比,包括cc2430,cc2420,cc2530,mac139xx,等等的参数对比。