一次完整的嵌入式开发课程设计经历(附:项目工程及关键代码)

终于结束了一个星期的嵌入式课程设计(其实也就五天时间),简单说一下这个培训的过程吧。首先介绍了一下Linux的基础知识吧(反正后来也没用上),包括怎么在虚拟机中操作文件以及一些基础的操作命令,然后介绍了一下C语言基础(嵌入式开发用的也是C语言),最后就开始做东西了,下面开始正文……

一、C语言复习是否有用

貌似学习编程的第一步就是学的C语言吧,大家能走(hun)到这个地步,对C语言也比较了解。本来自信满满,但是写出的代码却差强人意,也就是下面这个错误吧:

for(int i = 0; i < 10; i++){
	……
}

在循环条件中定义变量是 C++ 中允许的,但是在嵌入式开发中是不能有丝毫的含糊,这种写法不允许。

可能是使用 VC++6.0 写代码时,经常混淆使用 C++ 和 C 语言才导致现在自己的代码混乱。

在这里插入图片描述

二、本次课程设计的工具

在这里插入图片描述
课程设计中代码都是在这个软件中进行编写。(对应打开后缀为 .uvprojx 的文件)
在这里插入图片描述
所有的工程仿真都是在这个软件中进行的。(对应打开后缀为 .pdsprj 的文件)
在这里插入图片描述
STM32F103R6 芯片,这次课设主要使用这个芯片。

三、所有组件连接示意图

1. led灯的连接

在这里插入图片描述
加电阻防止电压过大,击穿灯泡。

灯泡不亮的原因,可能是方向接反了。

2. 风扇连接

在这里插入图片描述

3. 光敏元件连接

在这里插入图片描述

4. 蜂鸣器连接

在这里插入图片描述
蜂鸣器不响的原因:电压设置不正确:
在这里插入图片描述

四、课设工程及主要代码(已上传CSDN)

开发任务

	要求:
	1. 完成电路图设计
	2. 完成程序设计

	功能要求:
	3. 实时显示温湿度/光照强度
	4. 通过菜单来实灯的亮灭(LED1/LED2),蜂鸣器开关,风扇开关	
	5. 在底行显示当前硬件状态,开启为1,关闭为0
	6. 温度超过28度,或湿度高于85%进行报警

项目最终的工程图
在这里插入图片描述
下面是 main.c 的全部代码

#include "stm32f10x.h"
#include "LQ12864.h"
#include  "adc.h"
#include "dth11.h"
#define PUSH_UP 1
#define PUSH_DOWN 2
#define PUSH_OK 3
#define PUSH_NONE 4

void main_delay(int ms)
{
	int i,j;
	while(ms--)
	{
		for(i = 0;i < 5;i++)
			for(j = 0;j < 512;j++);
	}
}

void LED_Init()
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
	GPIO_SetBits(GPIOA,GPIO_Pin_5);
}

void Buzzer_Init()
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
}

void Fan_Init()
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_7);
}

void key_init(){
		GPIO_InitTypeDef init;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
		init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3;
		init.GPIO_Mode = GPIO_Mode_IPU;
		GPIO_Init(GPIOA, &init);
}

int key_read(){
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0){
		return PUSH_UP;
	}else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0){
		return PUSH_DOWN;
	}else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0){
		return PUSH_OK;
	}
	else
		return PUSH_NONE;
}
unsigned char Bmp013[] = 
{
/*------------------------------------------------------------------------------
  Ô´Îļþ / ÎÄ×Ö : 
  ¿í¡Á¸ß£¨ÏñËØ£©: 64¡Á32
------------------------------------------------------------------------------*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0xF8,0xFC,
0x0C,0x04,0x00,0xF8,0xF8,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x70,0xE0,0x00,0x00,0x00,0x00,0x60,0x60,
0x60,0x60,0xF0,0xF0,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,
0x00,0xC0,0xC0,0x3F,0x3F,0x33,0x33,0x33,0x31,0x30,0x38,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x70,0xE0,0x00,0x00,0x60,0x66,0x66,0x66,
0x66,0x66,0x7F,0x7F,0x66,0x66,0x66,0x66,0x66,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x00,0x00,0x00,0xFF,0xFF,
0x9B,0x9B,0x9B,0x9B,0x9B,0x9B,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,
0x01,0x01,0x01,0x01,0x31,0x61,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};



int main(void)
{	 
	int i = 2;
	int j;
	int led1 = 0, led2 = 0;	//±íʾÁ½¸öµÆµÄ³õʼ״̬£º0¡ª¡ªÃ𣬠1¡ª¡ªÁÁ
	int beep = 0;	//±íʾ·äÃùÆ÷µÄ״̬ 
	int fan = 0; //±íʾ·çÉȵÄ״̬
	uint16_t val;
	u8 temp,hum;
	char buf_temp[100]={0};
	LED_Init();
	LCD_Init(); 
	Buzzer_Init();
	Fan_Init();
	Adc_Init();
	DHT11_Init();
	key_init();
	//LCD_CLS();
	//main_delay(1000);
	//LCD_CLS();
	while(1){
		int key;
		DHT11_Read_Data(&temp,&hum);
		val = Get_Adc();
		sprintf(buf_temp,"temp:%d  hum:%d",temp,hum);
		LCD_P6x8Str(0,0,(unsigned char *)buf_temp);
		sprintf(buf_temp,"Light: %d",val);
		LCD_P6x8Str(0,1,(unsigned char *)buf_temp);
		LCD_P6x8Str(0,2,"LED1     ");
		LCD_P6x8Str(0,3,"LED2     ");
		LCD_P6x8Str(0,4,"BEEP     ");
		LCD_P6x8Str(0,5,"FAN     ");
		LCD_P6x8Str(40,i,"*");
		sprintf(buf_temp,"L1:%d L2:%d BP:%d FAN:%d",led1,led2,beep,fan);
		LCD_P6x8Str(0,6,(unsigned char *)buf_temp);
		if(temp > 28 || hum > 85){
			GPIO_ResetBits(GPIOA,GPIO_Pin_6);
			GPIO_ResetBits(GPIOA,GPIO_Pin_7);
			beep = 1;
			fan = 1;
		}else{
			GPIO_SetBits(GPIOA,GPIO_Pin_6);
			GPIO_SetBits(GPIOA,GPIO_Pin_7);
			main_delay(100);
			key = key_read();
			if(key == PUSH_UP){
				i--;
				if(i < 2){
					i = 5;
				}
			}else if(key == PUSH_DOWN){
				i++;
				if(i > 5){
					i = 2;
				}
			}else if(key == PUSH_OK){
				if(i == 2){
					//¿ØÖÆLED1µÄÁÁÃð
					if(led1 == 0){
						GPIO_ResetBits(GPIOA,GPIO_Pin_4);
						led1 = 1;
					}else{
						GPIO_SetBits(GPIOA,GPIO_Pin_4);
						led1 = 0;
					}
				}else if(i == 3){
					//¿ØÖÆLED2µÄÁÁÃð
					if(led2 == 0){
						GPIO_ResetBits(GPIOA,GPIO_Pin_5);
						led2 = 1;
					}else{
						GPIO_SetBits(GPIOA,GPIO_Pin_5);
						led2 = 0;
					}
				}else if(i == 4){
					//¿ØÖÆ·äÃùÆ÷µÄ¿ª¹Ø
					if(beep == 0){
						GPIO_ResetBits(GPIOA,GPIO_Pin_6);
						beep = 1;
					}else{
						GPIO_SetBits(GPIOA,GPIO_Pin_6);
						beep = 0;
					}
				}else{
					//¿ØÖÆ·çÉȵÄÁÁÃð
					if(fan == 0){
						GPIO_ResetBits(GPIOA,GPIO_Pin_7);
						fan = 1;
					}else{
						GPIO_SetBits(GPIOA,GPIO_Pin_7);
						fan = 0;
					}
				}
			}
		}
	}
}

工程下载地址: 工程文件已经上传至CSDN,点击下载

  • 12
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆papa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值