OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5442|回复: 9

小弟新手,求教。如何实现KEY1键按下,通过串口将“KEY1”发送到PC机?

[复制链接]

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
发表于 2013-6-5 07:31:26 | 显示全部楼层 |阅读模式
刚刚学习stm32,期末考核要交代码,自己搞了两个晚上没搞定。请会的朋友帮帮忙!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-5 08:58:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-5 11:50:00 | 显示全部楼层
回复【2楼】xouou_53320:
---------------------------------
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h" 
#include "key.h"    
//Mini STM32开发板范例代码3
//串口实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
int main(void)
{
u8 t;
u8 len;
int a=1;
int b=1;
u16 times=0;  
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化 
uart_init(72,9600);  //串口初始化为9600
LED_Init();     //初始化与LED连接的硬件接口 
KEY_Init();          //初始化与按键连接的硬件接口   
while(1)
{
t=KEY_Scan();
// switch(t) 
// { 
//       case 1:
//           printf("KEY1\r\n");//打印出KEY1 
//       case 2:
//           printf("KEY2\r\n");//打印出KEY2 
// }
if(USART_RX_STA&0x80)
{    
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
printf("\n您发送的消息为:\n");
printf("\nKEY1\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\n\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
printf("\nMiniSTM32开发板 串口实验\n");
printf("正点原子@ALIENTEK\n\n\n");
}
if(times%200==0)printf("请输入数据,以回车键结束\n");  
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   
}
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-6-5 23:38:55 | 显示全部楼层
回复【3楼】飞龙:
---------------------------------
搞定没?
没搞定明天去办公室帮你弄下。
这个真不难。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-5 23:43:54 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
没有,帮帮忙,马上就要交了,而且老师只让我们自学了六节课,不会啊
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-5 23:45:20 | 显示全部楼层
回复【5楼】飞龙:
---------------------------------
实验要求: 
1、本次实验涉及3个模块,分别为发光二极管LED1、LED2,按键KEY1、KEY2,串口; 
2、LED闪烁周期分5档,分别为0.2秒,0.4秒,0.6秒,0.8秒,1秒; 
3、KEY控制LED的闪烁频率,每按1次,周期增加1档;KEY1控制LED1,KEY2控制LED2; 
4、每次有键按下,通过串口发送到PC机上,如KEY1按下,则发送“KEY1.”,并换行。 
就第四个串口的我搞不定,下面是我自己写的全部代码#include <stm32f10x_lib.h> 
#include "sys.h" 
#include "usart.h"
#include "delay.h"
#include "led.h"  
#include "key.h"     
//Mini STM32开发板范例代码3 
//串口实验 
//正点原子@ALIENTEK 
//技术论坛:www.openedv.com
int main(void) 
{
u8 t; 
u8 len;
int a=1; 
int b=1; 
u16 times=0;   
Stm32_Clock_Init(9); //系统时钟设置 
delay_init(72);      //延时初始化  
uart_init(72,9600);  //串口初始化为9600 
LED_Init();      //初始化与LED连接的硬件接口  
KEY_Init();          //初始化与按键连接的硬件接口    
while(1) 

if(USART_RX_STA&0x80) 
{      
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度 
//printf("\n您发送的消息为:\n"); 

t=KEY_Scan(); 
switch(t)  
{  
        case 1: 
            printf("KEY1\r\n");//打印出KEY1  
        case 2: 
            printf("KEY2\r\n");//打印出KEY2  

printf("\nKEY1\n"); 
for(t=0;t<len;t++) 

USART1->DR=USART_RX_BUF[t]; 
while((USART1->SR&0X40)==0);//等待发送结束 

printf("\n\n");//插入换行 
USART_RX_STA=0; 
}else 

times++; 
if(times%5000==0) 

printf("\nMiniSTM32开发板 串口实验\n"); 
printf("正点原子@ALIENTEK\n\n\n"); 

if(times%200==0)printf("请输入数据,以回车键结束\n");   
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行. 
delay_ms(10);    


////LED1 
if(a==1) 

LED0=0; 
delay_ms(200); 
LED0=1; 
delay_ms(200); 
t=KEY_Scan(); 
if(t==1){a++;}

if(a==2) 

LED0=0; 
delay_ms(400); 
LED0=1; 
delay_ms(400); 
t=KEY_Scan(); 
if(t==1){a++;}

if(a==3) 

LED0=0; 
delay_ms(600); 
LED0=1; 
delay_ms(600); 
t=KEY_Scan(); 
if(t==1){a++;}

if(a==4) 

LED0=0; 
delay_ms(800); 
LED0=1; 
delay_ms(800); 
t=KEY_Scan(); 
if(t==1){a++;}

if(a==5) 

LED0=0; 
delay_ms(1000); 
LED0=1; 
delay_ms(1000); 
t=KEY_Scan(); 
if(t==1) 
a=1;

////LED2 
if(b==1) 

LED1=0; 
delay_ms(200); 
LED1=1; 
delay_ms(200); 
t=KEY_Scan(); 
if(t==2){b++;}

if(b==2) 

LED1=0; 
delay_ms(400); 
LED1=1; 
delay_ms(400); 
t=KEY_Scan(); 
if(t==2){b++;}

if(b==3) 

LED1=0; 
delay_ms(600); 
LED1=1; 
delay_ms(600); 
t=KEY_Scan(); 
if(t==2){b++;}

if(b==4) 

LED1=0; 
delay_ms(800); 
LED1=1; 
delay_ms(800); 
t=KEY_Scan(); 
if(t==2){b++;}

if(b==5) 

LED1=0; 
delay_ms(1000); 
LED1=1; 
delay_ms(1000); 
t=KEY_Scan(); 
if(t==2) 
b=1;
}
}   
}
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-5 23:46:51 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
先谢谢,不论帮不帮的到,只要有这个心的,都是好人啊
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-6-5 23:47:06 | 显示全部楼层
回复【6楼】飞龙:
---------------------------------
这些要求不会去一个一个实现给你。
只是告诉你key和串口的问题。
如果问题过多,那还得你自己学会去解决。。。
说实在的,也是看你在这里纠结这么久友情帮你解决吧,,,
我们一般的问题,也只会提供一种解决思路或者方法,不会帮忙写代码。。。。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-5 23:47:18 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
实验要求:  
1、本次实验涉及3个模块,分别为发光二极管LED1、LED2,按键KEY1、KEY2,串口;  
2、LED闪烁周期分5档,分别为0.2秒,0.4秒,0.6秒,0.8秒,1秒;  
3、KEY控制LED的闪烁频率,每按1次,周期增加1档;KEY1控制LED1,KEY2控制LED2;  
4、每次有键按下,通过串口发送到PC机上,如KEY1按下,则发送“KEY1.”,并换行。  
就第四个串口的我搞不定,下面是我自己写的全部代码#include <stm32f10x_lib.h>  
#include "sys.h"  
#include "usart.h"
#include "delay.h"
#include "led.h"   
#include "key.h"      
//Mini STM32开发板范例代码3  
//串口实验  
//正点原子@ALIENTEK  
//技术论坛:www.openedv.com
int main(void)  
{
u8 t;  
u8 len;
int a=1;  
int b=1;  
u16 times=0;    
Stm32_Clock_Init(9); //系统时钟设置  
delay_init(72);      //延时初始化   
uart_init(72,9600);  //串口初始化为9600  
LED_Init();      //初始化与LED连接的硬件接口   
KEY_Init();          //初始化与按键连接的硬件接口     
while(1)  
{  
if(USART_RX_STA&0x80)  
{       
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度  
//printf("\n您发送的消息为:\n");  

t=KEY_Scan();  
switch(t)   
{   
        case 1:  
            printf("KEY1\r\n");//打印出KEY1   
        case 2:  
            printf("KEY2\r\n");//打印出KEY2   
}  
printf("\nKEY1\n");  
for(t=0;t<len;t++)  
{  
USART1->DR=USART_RX_BUF[t];  
while((USART1->SR&0X40)==0);//等待发送结束  
}  
printf("\n\n");//插入换行  
USART_RX_STA=0;  
}else  
{  
times++;  
if(times%5000==0)  
{  
printf("\nMiniSTM32开发板 串口实验\n");  
printf("正点原子@ALIENTEK\n\n\n");  
}  
if(times%200==0)printf("请输入数据,以回车键结束\n");    
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.  
delay_ms(10);     
}  

////LED1  
if(a==1)  
{  
LED0=0;  
delay_ms(200);  
LED0=1;  
delay_ms(200);  
t=KEY_Scan();  
if(t==1){a++;}
}  
if(a==2)  
{  
LED0=0;  
delay_ms(400);  
LED0=1;  
delay_ms(400);  
t=KEY_Scan();  
if(t==1){a++;}
}  
if(a==3)  
{  
LED0=0;  
delay_ms(600);  
LED0=1;  
delay_ms(600);  
t=KEY_Scan();  
if(t==1){a++;}
}  
if(a==4)  
{  
LED0=0;  
delay_ms(800);  
LED0=1;  
delay_ms(800);  
t=KEY_Scan();  
if(t==1){a++;}
}  
if(a==5)  
{  
LED0=0;  
delay_ms(1000);  
LED0=1;  
delay_ms(1000);  
t=KEY_Scan();  
if(t==1)  
a=1;
}  
////LED2  
if(b==1)  
{  
LED1=0;  
delay_ms(200);  
LED1=1;  
delay_ms(200);  
t=KEY_Scan();  
if(t==2){b++;}
}  
if(b==2)  
{  
LED1=0;  
delay_ms(400);  
LED1=1;  
delay_ms(400);  
t=KEY_Scan();  
if(t==2){b++;}
}  
if(b==3)  
{  
LED1=0;  
delay_ms(600);  
LED1=1;  
delay_ms(600);  
t=KEY_Scan();  
if(t==2){b++;}
}  
if(b==4)  
{  
LED1=0;  
delay_ms(800);  
LED1=1;  
delay_ms(800);  
t=KEY_Scan();  
if(t==2){b++;}
}  
if(b==5)  
{  
LED1=0;  
delay_ms(1000);  
LED1=1;  
delay_ms(1000);  
t=KEY_Scan();  
if(t==2)  
b=1;
}
}    
}
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-6-4
在线时间
0 小时
 楼主| 发表于 2013-6-6 21:13:00 | 显示全部楼层
回复【8楼】Admin:
---------------------------------
又遇到新问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 22:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表