嵌入式作业07

一、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?

main.c:

#define GLOBLE_VAR
#include "includes.h"      //包含总头文件
 
int main(void)
{
//声明main函数使用的局部变量
	uint8_t mK1[32];	 //读取32字节数据
	uint8_t mK2[65];      //读取65字节数据
	
 //关总中断
	DISABLE_INTERRUPTS;
   
//开总中断
	ENABLE_INTERRUPTS;
 
    printf("------------------------------------------------------\n"); 
    printf("验证对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据\n"); 
    printf("------------------------------------------------------\r\n");
        
    //擦除第60扇区
	flash_erase(60);   
    //向60扇区第0偏移地址开始写32个字节数据
    printf("向60扇区写入32个字节数据\n");
    flash_write(60,0,32,(uint8_t *) "32106100060_CA");
	flash_read_logic(mK1,60,0,32); //从60扇区读取32个字节到mK1中
	printf("读取60扇区的32字节的内容:  %s\n",mK1);
	
    //向60扇区第33偏移地址开始写32个字节数据
    printf("不擦除继续向60扇区写入32个字节数据\n");
    flash_write(60,33,65,(uint8_t *) "CA_32106100060");
	flash_read_logic(mK2,60,0,65); //从60扇区读取65个字节到mK2中
	printf("读取60扇区的65字节的内容:  %s\n",mK2);
}

打开工程文件:

图中可知,对于有数据的某扇区,如果没有擦除(Flash_erase),不能写入新数据

二、在ADC模块中,显示当前温度和芯片内部温度,感受温度变化(分别用冷、热触碰)

main.c:

#define GLOBLE_VAR
#include "includes.h"      //包含总头文件
 
//main.c使用的内部函数声明处
void Delay_ms(uint16_t u16ms);
float Regression_Ext_Temp(uint16_t tmpAD);      //环境温度AD值转为实际温度
float Regression_MCU_Temp(uint16_t mcu_temp_AD); //MCU温度AD值转为实际温度
 
int main(void)
{
    //声明main函数使用的局部变量
    uint16_t num_AD1;	
    uint16_t num_AD2;
    uint16_t num_AD3;
    float ext_temp;  //外部温度
    float mcu_temp;  //MCU温度
    
    //关总中断
    DISABLE_INTERRUPTS;
    
    //用户外设模块初始化
    adc_init(ADC_CHANNEL_15,AD_DIFF);			   //初始化ADC通道15:热敏电阻
    adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE);	//初始化ADC通道:内部温度
   
    //开总中断
    ENABLE_INTERRUPTS;
    
    printf("------------------------------------------------------\n"); 
    printf("分别通过触摸芯片表面和热敏电阻,引起A/D值变化            \n"); 
    printf("显示芯片内部温度和热敏电阻当前温度          \n");
    printf("------------------------------------------------------\n"); 
	
	while(1){
		num_AD2 = adc_ave(ADC_CHANNEL_15,8);            // 读取通道15的平均AD值
	   num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);    // 读取内部温度传感器的平均AD值
	
	   ext_temp = Regression_Ext_Temp(num_AD2);        // 计算热敏温度
	   mcu_temp = Regression_MCU_Temp(num_AD3);        // 计算MCU温度
	
	   printf("CA热敏电阻的A/D值:%d\n", num_AD2);
	   printf("CA热敏电阻的温度: %.2f¡ãC\n", ext_temp);
	   printf("CA内部温度传感器的A/D值:%d\n", num_AD3);
	   printf("CA芯片内部温度: %.2f¡ãC\r\n\n", mcu_temp);
	   
	   Delay_ms(3000);  // 延时3秒
	}
}  
 
//======以下为主函数调用的子函数===========================================
//======================================================================
//函数名称:Delay_ms
//函数返回:无
//参数说明:无
//功能概要:延时 - 毫秒级
//======================================================================
void Delay_ms(uint16_t u16ms)
{
    uint32_t u32ctr;
    for(u32ctr = 0; u32ctr < 8000*u16ms; u32ctr++)
    {
        __ASM("NOP");
    }
}
 
//============================================================================
//函数名称:Regression_Ext_Temp
//功能概要:将读到的环境温度AD值转换为实际温度
//参数说明:tmpAD:通过adc_read函数得到的AD值
//函数返回:实际温度值
//============================================================================
float Regression_Ext_Temp(uint16_t tmpAD)
{
    float Vtemp,Rtemp,temp;
    if(tmpAD<=72)
    {
       return -274;
    }
    Vtemp = (tmpAD*3300.0)/4096;
    Rtemp = Vtemp/(3300.0 - Vtemp)*10000.0;
    temp = (1/(log(Rtemp/10000.0)/3950.0 + (1/(273.15 + 25)))) - 273.15 + 0.5; 
    return temp; 
}
 
 
//============================================================================
//函数名称:Regression_MCU_Temp
//功能概要:将读到的mcu温度AD值转换为实际温度
//参数说明:mcu_temp_AD:通过adc_read函数得到的AD值
//函数返回:实际温度值
//============================================================================
float Regression_MCU_Temp(uint16_t mcu_temp_AD)
{
	float mcu_temp_result;
	mcu_temp_result=(float)(55+(100*((float)(mcu_temp_AD) - AD_CAL1))/(AD_CAL2 - AD_CAL1));
	return mcu_temp_result;
}

触摸芯片表面:

触摸热敏电阻:

冷触碰:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值