| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> imut 51单片机课设 模拟室内温度检测器 *秋昊 -> 正文阅读 |
|
[嵌入式]imut 51单片机课设 模拟室内温度检测器 *秋昊 |
写在前面的话: 本文主要讲述了一下IMUT的单片机课设报告。 下面的百度云链接中包括了:ICL7109手册,ICL7109自检_标度转换(excel),课设报告(word版),演示视频,程序源码。 链接:https://pan.baidu.com/s/11rYRBHVuxdQT_ll0R2NnZg? 以下是课设报告的具体内容: 摘 ??要 ? ? ? ?温度与现代人类的生产、生活有着密切的关系,同时也是各大产业最常见的基本工艺参数。随着我们的生活质量的提升,人们对于生存环境已经愈发关注,而空气中的温度变化,往往会影响到各大产业的生产情况,对人的情绪也会产生一定的影响。因此,对温度的检查就显得十分地有必要了。本设计中的温度检测器,输出温度采用数字显示器显示。温度测量范围为0-50℃,可以完成一般的需要。本实践设计了一种以STC89C51单片机为主控制单元,以ICL7109为模拟温度传感器的模拟室温监控系统。该系统可以实时测量相关的温度数据,通过对比温度测量值与温度上下限来做出下一步动作。实践设计了一系列相关程序完成硬件部分自检以及温度检测。其中硬件部分主要包括STC89C51单片机最小系统,ICL7109测温部分、按键部分、数码管显示部分以及报警部分等。系统程序主要包括主程序、按键处理函数、读出温度函数、标度转换函数、数码管显示函数以及对比报警函数等。 关键词:STC89C51单片机,ICL7109,模拟温度控制 目录 3.5程序清单可分两栏打印,要求有明确的程序注解(可放备注) 一、设计目的与意义? ? ? ?随着社会的发展,温度的测量及控制变得越来越重要。本文采用单片机STC89C51设计了温度实时测量及对比报警系统。单片机STC89C51能够根据温度传感器ICL7109所采集的温度在数码管上实时显示,通过对比报警使温度超出上下限时能够报警。所有温度数据均通过数码管显示出来。 ? ? ? ?通过此实践课程的学习使我们熟悉开发板的内部电路和硬件,熟练掌握单片机的编程语言,我们通过分组的模式来对任务进行开发,根据老师下达要求,验收各阶段的任务来进行逐步的设计,培养学生的自我学习,自我动手实践能力。并了解工程项目设计实施的全过程,达到提高学生工程实践能力和素质的目标。 二、硬件实验板介绍及硬件自检2.1硬件图及相关说明2.1.1蜂鸣器? ? ? ? 说明:蜂鸣器变量定义为P3^7,单片机执行指令P3.7为“1”,使得此时NPN三极管导通,促使蜂鸣器被供电,根据相应的延时函数发出两种频率的“滴滴”声音。由此可以判断单片机的蜂鸣器电路没有问题,功能可以正常实现。 图2.1.1.1 蜂鸣器原理图 2.1.2按键部分? ? ? ?说明:由原理图可知当按键按下,输入低电平。 ? ? ? ?键盘是单片机应用系统中的主要输入设备,单片机使用的键盘分为编码键盘和非编码键盘。编码键盘采用硬件线路来实现键盘的编码,每按下一个键,键盘能够自动生成按键代码,并有去抖功能。非编码键盘中键的数量较少,硬件简单,在单片机中应用非常广泛。 .图2.1.2.1 按键原理图 2.1.3 ICL7109图2.1.3.1 ?ICL7109原理图 ? ? ? ?说明:?ICL7109的接口电路较强,输出为12位二进制数。其特点是:可与TTL电路兼容;具有三态控制输出;有通用信号控制端,可方便监视转换;有极性和溢出位;片内有振荡器,UART异步收发数据交换;可串行、并行接口;差分输入,差分基准电压使其具有较低噪声和较小误差;带有防静电保护功能;类似型号有TSCICL7109,ADCICL7109。模拟部分接线图: 图2.1.3.2 ICL7109模拟室温传感器 2.1.4 数码管一、简介 ? ? ? ?数码管是一种半导体发光器件,其基本单元是发光二极管。能显示4位数字的叫四位数码管,当然也有多位和只有一位的数码管,他们的电气原理相同。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 图2.4.1.1 数码管显示器 二、电气特性 ? ? ? ?单位数码管有十个管脚,其中有8根是用来点亮a,b,c,d,e,f,dp 共8个发光二极管(原理中有介绍),3,8两个管脚为公共COM脚,它们相连通且作用相同,可接任意一根。为了更清楚介绍,贴图如下 ?图2.4.1.2 共阳极数码管结构图 图2.4.1.3 共阳数码管脚位对应图 三、驱动方式 1、静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 2、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。 2.1.5 开关电源1、基本电路 ?图2.1.5.1 开关电源基本电路框图 ? ? ? ?开关式稳压电源的基本电路框图如图二所示。 ? ? ? ?交流电压经整流电路及滤波电路整流滤波后,变成含有一定脉动成份的直流电压,该电压进人高频变换器被转换成所需电压值的方波,最后再将这个方波电压经整流滤波变为所需要的直流电压。 ? ? ? ?控制电路为一脉冲宽度调制器,它主要由取样器、比较器、振荡器、脉宽调制及基准电压等电路构成。这部分电路目前已集成化,制成了各种开关电源用集成电路。控制电路用来调整高频开关元件的开关时间比例,以达到稳定输出电压的目的。 2.2自检子程序流程框图??????
|
李** | 负责数码管部分 |
刘** | 负责按键部分 |
王** | 负责蜂鸣器部分 |
李** | 编写程序,硬件测试,任务书撰写 |
刘** | 查找资料,协助修改程序,写实践报告 |
王** | 绘制程序框图 |
将程序模块化,分为三个部分:温度采集模块、数码管显示模块、对比报警模块
(1)目标:使之采集温度,通过P0输入十六位二进制温度值数据(高三位和高四位是符号,后十二位是温度值),通过算法转化为十进制数,然后将其再对应为0-50℃,最后显示在数码管上。
(2)大致过程:初始化ICL7109→发ROM功能命令→发外部中断0使能命令→单片机依次采集数据→单片机处理数据→数码管显示温度
(3)设计思路:将以上过程分为几个函数,分别实现各功能。分别写出:初始化函数、读一位函数、写一位函数、读取温度函数、温度显示与数据转换函数。
(1)目标:用三个按键实现温度上下限设置加减。
① S1:加法按键(当前位加)
②S2:功能选择键(不按表示修改上限,按一下表示修改下限,再按一下回到修改上限)
③ S3:减法按键(设置当前位减)
(3)设计思路:使用三个函数,分别为模式设置函数,上限设置函数和下限设置函数。模式设置函数用if语句,如果S2按下,则使S2计数加一,当计数大于1时则使其回到0,这样就能一直在上限设置和下限设置中。上限设置函数中包括S1和S3的加减功能,最后数据都存入变量hnum和lnum里面。将这两个变量赋给数组,传送到数码管上显示出来。
(1)目标:如果ICL7109初始化成功,则不断更新并显示当前温度。最开始显示初始化的上下限温度值,后期设置上下限温度后更新显示温度值。
(2)设计思路:通过功能选择,选择修改上下限功能或温度检测功能。若选择修改上下限功能,则进入按键处理模块;若选择温度检测功能。则进入温度采集模块。
(1)目标:将测出的温度值与设定的温度上下限进行比较,比较过后如果超出上下限,则点亮相应的LED灯,如果超出极限值后,则点亮相应的LED灯的同时发出警报。
(2)设计思路:用if条件语句对比温度是否过高或过低→过高则点亮相应的LED灯,过低则不点亮,并等待下一次对比→用if条件语句对比温度是否高与极限温度→过高则点亮相应的LED灯的同时发出警报,不过高,则依旧点亮相应的LED灯。
?图3.4.1.1 总程序框图
(1)按键处理模块
?图3.4.2.1 按键处理模块框图
(2) 对比报警模块
图3.4.2.2 对比报警模块框图
#include<reg51.h>
#include<stdio.h>
typedef long u32;
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
/*********************变量声明*******************/
sbit beep = P2^3;
sbit led1 = P0^4;
sbit led2 = P0^5;
sbit led3 = P0^6;
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit p27 = P2^7;
sbit p26 = P2^6;
sbit p25 = P2^5;
sbit lben = P2^2;
sbit hben = P2^1;
sbit load = P2^0;
u8 smgdata[]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde}; //数码管码字
u8 disp[4];
u8 i=0;
u8 ans=0;
u32 ans1 = 0;
u32 ans2 = 0;
u32 ans3 = 0;
u16 temphigh = 0;
u16 templow = 0;
u32 temp=0;
u32 sum=0;
/*********************基础函数*******************/
/******延时******/
u8 delay(u8 num)
{
u8 a,b,c;
for(a=num;a>0;a--)
for(b=200;b>0;b--)
for(c=20;c>0;c--);
return 0;
}
/******延时******/
void delay2(u16 a)
//int i = 0;
{
while(a--);
}
/******数码管数字循环******/
void fun1(){
P0 = 0x7e; //显示数字0
delay(30);
P0 = 0x0c; //显示数字1
delay(30);
P0 = 0xb6; //显示数字2
delay(30);
P0 = 0x9e; //显示数字3
delay(30);
P0 = 0xcc; //显示数字4
delay(30);
P0 = 0xda; //显示数字5
delay(30);
P0 = 0xfa; //显示数字6
delay(30);
P0 = 0x0e; //显示数字7
delay(30);
P0 = 0xfe; //显示数字8
delay(30);
P0 = 0xde; //显示数字9
delay(30);
P0 = 0x01; //显示小数点
delay(30);
}
u16 hextochar0(){
u8 a;
a = ans1 & 0x000f;
switch(a)
{
case 0x0000:
a = 0;break;
case 0x0001:
a = 1;break;
case 0x0002:
a = 2;break;
case 0x0003:
case 0x0004:
a = 3;break;
a = 4;break;
case 0x0005:
a = 5;break;
case 0x0006:
a = 6;break;
case 0x0007:
a = 7;break;
case 0x0008:
a = 8;break;
case 0x0009:
a = 9;break;
case 0x000a :
a = 10;break;
case 0x000b :
a = 11;break;
case 0x000c :
a = 12;break;
case 0x000d :
a = 13;break;
case 0x000e :
a = 14;break;
case 0x000f :
a = 15;break;
}
return a;
}
u16 hextochar1(){
u8 a;
a = (ans2 >> 4) & 0x000f;
switch(a)
{
case 0x0000:
a = 0;break;
case 0x0001:
a = 1;break;
case 0x0002:
a = 2;break;
case 0x0003:
a = 3;break;
case 0x0004:
a = 4;break;
case 0x0005:
a = 5;break;
case 0x0006:
a = 6;break;
case 0x0007:
a = 7;break;
case 0x0008:
a = 8;break;
case 0x0009:
a = 9;break;
case 0x000a :
a = 10;break;
case 0x000b :
a = 11;break;
case 0x000c :
a = 12;break;
case 0x000d :
a = 13;break;
case 0x000e :
a = 14;break;
case 0x000f :
a = 15;break;
}
return a;
}
u16 hextochar2(){
u8 a;
a = (ans3 >> 8) & 0x000f;
switch(a)
{
case 0x0000:
a = 0;break;
case 0x0001:
a = 1;break;
case 0x0002:
a = 2;break;
case 0x0003:
a = 3;break;
case 0x0004:
a = 4;break;
case 0x0005:
a = 5;break;
case 0x0006:
a = 6;break;
case 0x0007:
a = 7;break;
case 0x0008:
a = 8;break;
case 0x0009:
a = 9;break;
case 0x000a :
a = 10;break;
case 0x000b :
a = 11;break;
case 0x000c :
a = 12;break;
case 0x000d :
a = 13;break;
case 0x000e :
a = 14;break;
case 0x000f :
a = 15;break;
}
return a;
}
/******十六进制转十进制******/
u32 fun2(){
u16 sum2=0;
u8 a,b,c;
a = hextochar0();
b = hextochar1();
c = hextochar2();
sum2 = c*256+b*16+a;
return sum2;
}
/**********************自检**********************/
/******蜂鸣器自检******/
void beeptest(){
for(i = 0;i < 3;i++){
beep = 0;
delay(50);
beep = 1;
delay(50);
beep = 0;
delay(20);
beep = 1;
delay(20);
beep = 0;
delay(30);
beep = 1;
delay(30);
}
beep=1;
}
/******按键自检******/
void keytest(){
p25 = 0; p26 = 0; p27 = 0;//DT1选通
P0=0x00;//起初没有灯亮
for(i=0;i<4;){
p25 = 1; p26 = 1; p27 = 1;//SEL8选通
//判断按键1
if(key1 == 0){
delay(20); //按键消抖
if(key1 == 0){
p25 = 1; p26 = 0; p27 = 0; //启动数码管5
P0 = smgdata[1]; //显示数字1
beep = 0; //蜂鸣器打开
delay(150);
P0 = 0X00; //熄灭数码管
beep = 1; //蜂鸣器关闭
i++;
}
}
//判断按键2
p25 = 1; p26 = 1; p27 = 1;//SEL8选通
if(key2 == 0){
delay(20); //按键消抖
if(key2 == 0){
p25 = 0; p26 = 1; p27 = 1; //启动数码管4
P0 = smgdata[2]; //显示数字2
beep = 0; //蜂鸣器打开
delay(150);
P0 = 0X00; //熄灭数码管
beep = 1; //蜂鸣器关闭
i++;
}
}
//判断按键3
if(key3 == 0){
delay(20); //按键消抖
if(key3 == 0){
p25 = 0; p26 = 1; p27 = 0; //启动数码管3
P0 = smgdata[3]; //显示数字3
beep = 0; //蜂鸣器打开
delay(150);
P0 = 0X00; //熄灭数码管
beep = 1; //蜂鸣器关闭
i++;
}
}
if(key4 == 0){
delay(20); //按键消抖
if(key4 == 0){
p25 = 0; p26 = 0; p27 = 1; //启动数码管2
P0 = smgdata[4]; //显示数字4
beep = 0; //蜂鸣器打开
delay(150);
P0 = 0X00; //熄灭数码管
beep = 1; //蜂鸣器关闭
i++;
}
}
}
delay(200);
}
/******数码管自检******/
void tubetest(){
p25 = 1; p26 = 0; p27 = 0; //启动数码管5
fun1();
p25 = 0; p26 = 1; p27 = 1; //启动数码管4
fun1();
p25 = 0; p26 = 1; p27 = 0; //启动数码管3
fun1();
p25 = 0; p26 = 0; p27 = 1; //启动数码管2
fun1();
p25 = 0; p26 = 0; p27 = 0; //启动数码管1
led1=0; //小灯泡熄灭
led2=0; //小灯泡熄灭
led3=0; //小灯泡熄灭
P0 = 0x8d; //数码管熄灭
delay(20);
}
/******设置外部中断0******/
void Int0Init()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
EA=1;//打开总中断
}
/******外部中断0的中断函数******/
void Int0() interrupt 0 //外部中断0的中断函数
{
load = 0; //输出引脚打开
lben = 1; //关闭低8位输出
hben = 0; //打开高8位输出
temphigh = P1; //获取高8位数据
lben = 0; //打开低8位输出
hben = 1; //关闭高8位输出
templow = P1; //获取低8位数据
load = 1;
ans++;
}
/********************数据处理********************/
u32 datapros(){
u32 x=0;
u32 y=0;
// temphigh=0x08;
// templow=0x88;
temphigh = temphigh & 0x0f; //清除高2位数据,因为这两位数据没有意义
temp = (temphigh << 8) + templow; //合并数据
ans1 = temp;
ans2 = temp;
ans3 = temp;
x = fun2(); //十六进制转十进制
y = 0.012*x;
ans++;
return y;
}
/******报警函数******/
void baojing(){
p25 = 0; p26 = 0; p27 = 0;//DT1选通
P0=0x00;//起初没有灯亮
//beep = 1;
if(sum <= 16 && sum >= 5){ //过冷
led1 = 1; //红灯亮,加热
beep = 1;
delay2(10);
}
else if(sum < 5){
led3 = 1;
led1 = 1; //报警灯亮+红灯亮,加热
beep = 0;
delay2(30);
}
else if(sum >= 26 && sum <= 36){ //过热
led2 = 1;//绿灯亮,降温
beep = 1;
delay2(10);
}
else if(sum > 36 ){
led3 = 1;
led2 = 1; //报警灯亮+绿灯亮,降温
beep = 0;
delay2(30);
}
else if(sum >= 16 && sum <= 26) //正常
{
P0=0x00; //没有灯亮
beep = 1;
}
p25 = 1; p26 = 1; p27 = 0;
beep = 1;
}
/******数码管动态显示******/
void DigDisplay(u16 sum)
{
disp[0]=smgdata[sum/1000];// 千位
disp[1]=smgdata[sum%1000/100];//百位
disp[2]=smgdata[sum%100/10];//十位
disp[3]=smgdata[sum%10]; //个位
for(ans = 0;ans<250;ans++){
for(i=0;i<4;i++)
{
switch(i)
{
case 0:
p25 = 0; p26 = 0; p27 = 1;break; //显示第1个数码管
case 1:
p25 = 0; p26 = 1; p27 = 0;break; //显示第2个数码管
case 2:
p25 = 0; p26 = 1; p27 = 1;break; //显示第3个数码管
case 3:
p25 = 1; p26 = 0; p27 = 0;break; //显示第4个数码管
}
P0 = disp[i];//显示数值
delay2(100); //延时,造成视觉暂留现象
P0 = 0x00; //数码管消隐
baojing(); //报警
}
}
}
/*----------------------------------------------*/
/*********************主函数*********************/
/*----------------------------------------------*/
void main(){
//tubetest(); //数码管自检函数
//beeptest(); //蜂鸣器自检函数
//keytest(); //按键自检函数
while(1){ //循环 模拟室温检测程序段
Int0Init(); // 打开外部中断0
for(ans=0;ans<10;){ //求均值滤波
sum += datapros(); //数据处理函数
}
ans = 0;
sum /= 10;
DigDisplay(sum); //数码管显示函数
}
}
? ? ? ?有以下四个状态可知:可以手动调试上下限温度值,并根据当前的温度值与设置的上下限温度值对比来判断是否报警。
图3.6.1.1 初始正常状态
?
?图3.6.2.1 超出上限26度,降温灯工作
图3.6.3.1 超出临界上限36度,降温灯工作,报警灯工作,蜂鸣器工作
图3.6.4.1 低于下限16度,升温灯工作
图3.6.5.1 低于临界下限5度,升温灯工作,报警灯工作,蜂鸣器工作
李**:
? ? ? ?两个星期的单片机课设即将进入尾声,在这十多天里我体会到了硬件调试与软件调试的区别,很多次我们把同样的程序写入到实验板里,但是得到的结果不尽相同:屏幕只是亮,但是不显示写入的数据;新的程序下进去屏幕上的数据并没有刷新,这时候我们对错误进行分析,有时是因为调试环境没有设置正确的参数,大多数因为硬件接触不实,真的很令人头疼,时而感到沮丧,但是想到自己的能力需要靠一次次的失败来提升,若只是每次随随便便放过自己,不过只是原地踏步,想要学到东西还是需要继续努力啊。
? ? ? ?一开始接触课题时,发现很多地方没有头绪,不知道应该怎么开始后面在老师的讲解以及同学之间相互讨论,将一个又一个的问题都给解决了。后来发现,同时解决问题也是十分重要的,调试程序和硬件的过程中总是会遇到很多问题,在看参考资料和同学们的共同努力下,问题被一个个攻克,也能逐渐编写出能够正常运行并符合要求的程序,能够实现相应的功能,而且程序结构在不断的修改中变得简洁明了,让我在学习中积累,不断丰富自己的知识。
? ? ? ?在这段时间的实习中,我很好的学习了C语言的相关知识,以及对电路图原理以及对程序调试有了新的认识,通过和小组人的配合,让我了解到很多事情不是一个人能够完成的,只有通过团结合作,才能使好多事情变得轻松完成。在这里我不仅仅要感谢我的组友,还要谢谢指导老师的耐心指导,以及给我们传授了一些课本上面所没有的东西。
刘**:
? ? ? ?经过本次实践,我对单片机这门课程了解更深了。单片机的知识点涉及的内容是很多的,因此学习所需要花的时间也是十分多的。在此次的单片机课设的过程中,我发现我有许多的知识并没有掌握到,因此在做课设的时间里,我需要查很多的资料,在查的过程中让我温习了许多的知识点,也让我学习到了很多的新知识,让我收获颇深。
? ? ? ?我们选择的课题是模拟室内温度检测器,在最开始准备的阶段,我们发现有一些模块是我们不曾接触的:ICL7109,开关电源。我们几个虽然平时水平都不是很好,但是大家都很努力的查资料,上b站上看相关视频给自己进行补课,研究时序图,研究引脚功能,研究各种指令的意义,了解数据传输有多少位,每一位是什么意思,在将时序图与程序对应的过程中,我意识到软件的底层是硬件,只有了解硬件的每个状态才能通过软件进行硬件进行控制。89c51的cpu运行速率是很快的,而我们扩展的外设(ICL7109)他们的速率远远不及51,所以需要加大量延时,而延时也要区分,数码管和ICL7109的初始化中延时要使用us级的延时,但在将数据写入数码管时使用ms级的延时。使用key对温度的上下限进行设置,我们只有三个键,来调整两个数,并对他们进行加减,这就意味着我们要用一个键实现对功能的切换,我们采用对按键的次数进行统计来实现功能切换,这就成为了老大难的问题,但是我们仍然在努力实现!这一段时间,我学会将任务分成很多小模块,并用基础的知识实现每一块小模块来最终实现最后的整体功能,不积跬步无以至千里,是不可能一步跨越到成功的,我意识到了理论和实践的区别,学会了和会用之间是有距离的,调程序是需要耐心的,世上不确定的东西有很多,不是程序对了,下载到硬件里就可以确定成功,但是世上确定的东西也很多,付出时间去学去了解之后的我也不一样了。
王**:
? ? ? ?一周的单片机课程设计实训,真是让我们受益匪浅,学到了很多东西。起初,对单片机的设计毫无头绪,但是通过查阅资料和老师任务安排,我慢慢有了思路。一开始查看了几段代码,感觉我只是部分了解,后在视频的指导之下,不明白的知识点得以补充。但是,当在软件环境下运行时,代码显示出很多错误。不过,在组员以及其他成员的帮助下,我们组解决了这些问题。在课设过程中,相对比较重要的部分就是设计思路了,也就是画流程框图。其画法简单,结构清晰,逻辑性强,便于描述,容易理解。最后一部分便是写实验报告了,这需要对一周的工作进行回顾和详细总结,为其画上一个圆满的句号。
? ? ? ?踉踉跄跄地忙碌了一周,我的单片机课程设计也终将告一段落。设计实物也基本达到预期的效果,但由于能力和时间的关系,仍有很多需要完善的地方。通过单片机课设,我从中收获颇多,认识到完成一项任务需要一个认真且负责的态度。
[1] 裴岩 刘利民.《单片机系统综合设计与实践》[M].内蒙古:内蒙古大学出版社,2003.
[2] 张海龙.基于ICL7109的单片机测温系统[J].电子制作,2016(11):25-25.
[3] 侯佳亮,张涛,卢涵宇.基于单片机的室内测温控制系统设计[J].电脑知识与技术,2020(13):242-244.
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:19:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |