初级会员

- 积分
- 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;
}
}
} |
|