单片机课设

时间:2024.4.29

?

单片机程设计报告?

课程名称: 单片机课程设计 实验项目: 基于单片机的PWM波形发生器的设计 专业班级: 电子科学与技术专业0902 姓 名: 宋潇辉 学 号: 090403036 课设时间: 2012.2.27 批阅时间: 指导教师: 成 绩:

单片机课设

课题名称:

基于单片机的PWM波形发生器的设计

主要指标:

根据A\D输入0-5V电压,调整PWM的脉宽,并显示占空比 任务要求:

用电位器调整输入到0-5V电压给A\D,改变PWM波形的脉宽,并用数码管显示出相应的占空比

时间安排:

第一周 周一至周三 查找相关资料,确定总体方案

周四至周日 连接开发板,分部书写程序

第二周 周一至周三 调试程序,检验显示结果

周四至周五 撰写课程设计报告

周五 答辩

前言

PWM是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。

随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。

PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。 对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。

原件清单

单片机课设

目录

前言 ???????????????? 原件清单 ??????????????

第一章 概述

1.1 STC89C54RD+介绍 ??????

1.2 PWM知识介绍????????

1.3 PCF8591P芯片介绍 ?????

1.4 74HC573 芯片介绍??????

第二章 硬件电路的设计

3.1 系统设计框图????????

3.2 系统复位电路????????

3.3 时钟电路??????????

3.4 A\D转换电路 ………………………

3.5 数码管显示电路 ??????

第三章 程序编写???????????

第四章 遇到问题及解决方案??????

第五章 设计心得??????????? 鸣谢 ???????????????? 参考文献 ??????????????

第一章 概述

1.1 STC89C54RD+介绍

STC89系列芯片是51芯片的加强版。STC89C54RD+单片机具有提高MCU的运行速度,运行稳定,价格便宜,良好的性价比等特点,其支持的最高时钟为80M,这样能最大限度地提高MCU的运行速度;具有双倍速功能,支持6时钟周期模式运行;具有ISP在线系统编程功能,大大缩短开发复杂度,同时可节省购买编程器的额外投入;STC89C54RD+单片机内部包括16KB的Flash程序存储器ROM、1KB的数据存储器 RAM,与普通的8051单片机完全兼容,而51单片机的开发环境也很成熟:如KeilC语言广泛地应用于新产品的开发,这对于缩短系统开发周期有着很重要的意义,管脚图如下所示

1.2 PWM知识介绍

单片机课设

1.2.1 PWM定义

PWM是英文“Pulse WidthModulation”的缩写,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。

脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(1),要么完全无(0)。电压或电流源是以一种通(1)或断(0)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

1.2.2 1.2.2 占空比

就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比

1.2.3 单片机产生PWM

单片机扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输出PWM波,直接控制电源的工作。

这里采用的晶振频率为12MHz。单片机内部含有两个16位可编程定时器/计数器,可设置计数器位数16位,13位,8位。

计数器位数16,振荡周期12分频后脉冲计数,则计数一次为1us,每个PWM周期为65536us,频率为1*1000000/65536=15Hz。频率太低,导致开关电源严格的电惯性。

计数器位数13,振荡周期12分频后脉冲计数,则计数一次为1us,每个PWM周期为8192us,频率为1*1000000/8192=122Hz。音频范围之内,也不可忍受。

故只能采用计数器位数8,则振荡周期12分频后脉冲计数,则计数一次为1us,每个PWM周期为256us。

1.3 PCF8591P芯片介绍

PCF8591P 是单片、单电源低功耗8位CMOS数据采集器件,只有4个模拟

输入、一个输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C中线而不需要额外硬件。器件的地址、控制盒数据通过两线双向I2C做总线传输。

器件功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模转换。最大转换速率取决于I2C总线的最高速率。

引脚:

A/D转换器采用逐次逼近转换技术。在A/D转换周期将临时使用片上D/A转换器和高增益比较器。一个A/D转换周期总是开始于发送一个有效模式地址给 PCF8591之后,A/D转换周期在应答时钟脉冲的下降沿被触发,并在传输前一次转换时执行。一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片并被转换为对应的8位二进制码,取自差分输入的采样将被转换为8位二进制补码。

开始和停止条件:

数据和时钟线在中不忙时保持高电平。在时钟为高电平时,数据线上的一个由高到低的变化定义为开始条件。时钟为高电平时,数据线上的一个由低到高的变化被定义为停止条件。

单片机课设

开始状态 停止状态

1.4 74HC573 芯片介绍

74HC573是八进制 3态非反转透明锁存器,其管脚图如下:

当锁存使能端C为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。OC\脚为三态允许控制端,低电平有效;1D~8D为数据输入端;1Q~8Q为数据输出端。

第二章 硬件电路的设计

3.1 系统设计框图

通过调节电位器,使加在A\D芯片输入端口的电压在0-5V之间变化,A\D进行数据的采集,然后将转化好的数据传输给单片机,单片机在根据传输进的信息和数据进行处理,然后输出PWM波形,控制LED灯的亮度发生变化,并在数码管上显示出正确占空比的值。

单片机课设

单片机课设

时钟信号负责给整个程序的运行提高时间的同步,并为必要的延时提供参考依据。

3.2 系统复位电路

开发板上将两个复位系统和在了一起,通过调帽进行选择,这里我们选择的SW1部分的复位系统。

上电后,由于电容充电,使RST持续一段时间的高电平。当单片机处于运行状态时,按下复位键也能使RST维持一段时间的高电平,从而实现上电且开关复位的操作。

3.3 时钟电路

单片机课设

单片机课设

为了和单片机的时钟与外部信号保持一致,这里我们采用的是外部震荡方式。 外部震荡方式是把已有的时钟信号引入单片机内部,如图所示,这里我们采用的是12MHz的晶振。

3.4 A\D转换电路

开发板上的A\D是一个似端口输入的A\D,这里我们只是用到了其中的一路,故用调帽将需要的端口连接起来,进行数据的采集

3.5 数码管显示电路

一个七段的数码管算上小数点位共有八个管脚如果用单片机直接控制,每个数码管至少需要八个端口,这样一个STC89系列的单片机最多只能驱动四个数码管,造成了端口资源的浪费。

而在本次课设中我们用到了六个数码管,很明显,用直连的方法是行不通的。故这里我们采用的是动态扫描的方法。

单片机课设

单片机课设

动态扫描与直接控制最大的不同是——数

码管不是静止不动的,而是在动态的发生着变化,只不过这种变化非常快,快到我们的眼睛分辨不出来它们在动,但是若用快速相机可以拍摄下来。

这里我们用到了两个74hc573八进制三态非反转透明锁存器,分别控制着位锁存和段锁存,单片机的八个端口同时向两个芯片输送数据,而通过位锁存和段锁存(芯片C端)进行时间点上的输出的控制,这样就做到了用十个端口控制八个七段的数码管了。

第三章 程序编写

Main.c

/*-----------------------------------------------

PCF8591 AD/DA转换

使用4路AD中的1路检测外部模拟量输入

------------------------------------------------*/

#include <reg52.h>

#include "i2c.h"

#include "delay.h"

#include "display.h"

#include"pwm.h"

单片机课设

#define AddWr 0x90 //写数据地址

#define AddRd 0x91 //读数据地址

sbit led=P1^0;

unsigned char num=0;

extern bit ack;

unsigned char ReadADC(unsigned char Chl); bit WriteDAC(unsigned char dat);

/*------------------------------------------------

主程序

------------------------------------------------*/

main()

{

Init_Timer0();

Init_Timer1();

while (1) //主循环

{

num=ReadADC(0);

TempData[0]=dofly_DuanMa[num/100]; TempData[1]=dofly_DuanMa[(num%100)/10]; TempData[2]=dofly_DuanMa[(num%100)%10]; TempData[4]=dofly_DuanMa[0]|0x80;

TempData[5]=dofly_DuanMa[((num*100)/256)/10]; TempData[6]=dofly_DuanMa[((num*100)/256)%10]; //主循环中添加其他需要一直工作的程序 DelayMs(10);

}

}

/*------------------------------------------------

读AD转值程序

输入参数 Chl 表示需要转换的通道,范围从0-3 返回值范围0-255

------------------------------------------------*/

unsigned char ReadADC(unsigned char Chl)

{

unsigned char Val;

Start_I2c(); //启动总线

SendByte(AddWr); //发送器件地址 if(ack==0)return(0);

SendByte(0x40|Chl); //发送器件子地址 if(ack==0)return(0);

Start_I2c();

SendByte(AddWr+1);

if(ack==0)return(0);

Val=RcvByte();

NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(Val);

}

/*------------------------------------------------

写入DA转换数值

输入参数:dat 表示需要转换的DA数值,范围是0-255 ------------------------------------------------*/

/*bit WriteDAC(unsigned char dat)

{

Start_I2c(); //启动总线

SendByte(AddWr); //发送器件地址 if(ack==0)return(0);

SendByte(0x40); //发送器件子地址 if(ack==0)return(0);

SendByte(dat); //发送数据

if(ack==0)return(0);

Stop_I2c();

}*/

void Timer1(void) interrupt 3

{

static unsigned char temp=0;

temp++;

TH1=(65536-20)/256;

TL1=(65536-20)%256;

if(temp>=num)

led=1;

else

}

led=0;

Display.c

#include"display.h"

#include"delay.h"

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 //sbit LATCH1=P2^0;//定义锁存使能端口 段锁存

//sbit LATCH2=P2^3;// 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

static unsigned char i=0;

DataPort=0; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码

LATCH1=1; //段锁存

LATCH1=0;

i++;

if(i==Num)

}

/*------------------------------------------------ i=0;

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

//TH0=0x00;

//TL0=0x00;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

Display(0,8);

}

//重新赋值 2ms //给定初值

I2c.c

/*-----------------------------------------------

内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器

周期,即晶振频率要小于12MHZ)

------------------------------------------------*/

#include "i2c.h"

#include "delay.h"

#define _Nop() _nop_() //定义空指令 bit ack; //应答标志位

sbit SDA=P2^1;

sbit SCL=P2^0;

/*------------------------------------------------

启动总线

------------------------------------------------*/

void Start_I2c()

{

SDA=1; //发送起始条件的数据信号

_Nop();

SCL=1;

_Nop(); //起始条件建立时间大于4.7us,延时 _Nop();

_Nop();

_Nop();

_Nop();

SDA=0; //发送起始信号

_Nop(); //起始条件锁定时间大于4μ _Nop();

_Nop();

_Nop();

_Nop();

SCL=0; //钳住I2C总线,准备发送或接收数据 _Nop();

_Nop();

}

/*------------------------------------------------

结束总线

------------------------------------------------*/

void Stop_I2c()

{

SDA=0; //发送结束条件的数据信号

_Nop(); //发送结束条件的时钟信号

SCL=1; //结束条件建立时间大于4μ

_Nop();

_Nop();

_Nop();

_Nop();

_Nop();

SDA=1; //发送I2C总线结束信号

_Nop();

_Nop();

_Nop();

_Nop();

}

/*----------------------------------------------------------------

字节数据传送函数

函数原型: void SendByte(unsigned char c);

功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0 假)

发送数据正常,ack=1; ack=0表示被控器无应答或损坏。

------------------------------------------------------------------*/

void SendByte(unsigned char c)

{

unsigned char BitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位

{

if((c<<BitCnt)&0x80)SDA=1; //判断发送位

else SDA=0;

_Nop();

SCL=1; //置时钟线为高,通知被控器开始接收数据位 _Nop();

_Nop(); //保证时钟高电平周期大于4μ

_Nop();

_Nop();

_Nop();

SCL=0;

}

_Nop();

_Nop();

SDA=1; //8位发送完后释放数据线,准备接收应答位 _Nop();

_Nop();

SCL=1;

_Nop();

_Nop();

_Nop();

if(SDA==1)ack=0;

else ack=1; //判断是否接收到应答信号

SCL=0;

_Nop();

_Nop();

}

/*----------------------------------------------------------------

字节数据传送函数

函数原型: unsigned char RcvByte();

功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数。

------------------------------------------------------------------*/

unsigned char RcvByte()

{

unsigned char retc;

unsigned char BitCnt;

retc=0;

SDA=1; //置数据线为输入方式

for(BitCnt=0;BitCnt<8;BitCnt++)

{

_Nop();

SCL=0; //置时钟线为低,准备接收数据位

_Nop();

_Nop(); //时钟低电平周期大于4.7us

_Nop();

_Nop();

_Nop();

SCL=1; //置时钟线为高使数据线上数据有效 _Nop();

_Nop();

retc=retc<<1;

if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中 _Nop();

_Nop();

}

SCL=0;

_Nop();

_Nop();

return(retc);

}

/*----------------------------------------------------------------

应答子函数

原型: void Ack_I2c(void);

----------------------------------------------------------------*/

/*void Ack_I2c(void)

{

SDA=0;

_Nop();

_Nop();

_Nop();

SCL=1;

_Nop();

_Nop(); //时钟低电平周期大于4μ

_Nop();

_Nop();

_Nop();

SCL=0; //清时钟线,钳住I2C总线以便继续接收 _Nop();

_Nop();

}*/

/*----------------------------------------------------------------

非应答子函数

原型: void NoAck_I2c(void);

----------------------------------------------------------------*/

void NoAck_I2c(void)

{

SDA=1;

_Nop();

_Nop();

_Nop();

SCL=1;

_Nop();

_Nop(); //时钟低电平周期大于4μ

_Nop();

_Nop();

_Nop();

SCL=0; //清时钟线,钳住I2C总线以便继续接收 _Nop();

_Nop();

}

/*----------------------------------------------------------------

向无子地址器件发送字节数据函数 函数原型: bit ISendByte(unsigned char sla,ucahr c);

功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla. 如果返回1表示操作成功,否则操作有误。

注意: 使用前必须已结束总线。

----------------------------------------------------------------*/

/*bit ISendByte(unsigned char sla,unsigned char c)

{

Start_I2c(); //启动总线

SendByte(sla); //发送器件地址

if(ack==0)return(0);

SendByte(c); //发送数据

if(ack==0)return(0);

Stop_I2c(); //结束总线

return(1);

}*/

/*----------------------------------------------------------------

向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);

功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。

注意: 使用前必须已结束总线。

----------------------------------------------------------------*/

/*bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)

{

unsigned char i;

for(i=0;i<no;i++)

{

Start_I2c(); //启动总线

SendByte(sla); //发送器件地址

if(ack==0)return(0);

SendByte(suba); //发送器件子地址

if(ack==0)return(0);

SendByte(*s); //发送数据

if(ack==0)return(0);

Stop_I2c(); //结束总线

DelayMs(1); //必须延时等待芯片内部自动处理数据完毕 s++; suba++;

}

return(1);

}*/

/*----------------------------------------------------------------

向无子地址器件读字节数据函数 函数原型: bit IRcvByte(unsigned char sla,ucahr *c);

功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地 址sla,返回值在c.

如果返回1表示操作成功,否则操作有误。

注意: 使用前必须已结束总线。

----------------------------------------------------------------*/

/*bit IRcvByte(unsigned char sla,unsigned char *c)

{

Start_I2c(); //启动总线

SendByte(sla+1); //发送器件地址

if(ack==0)return(0);

*c=RcvByte(); //读取数据

NoAck_I2c(); //发送非就答位

Stop_I2c(); //结束总线

return(1);

}*/

/*----------------------------------------------------------------

向有子地址器件读取多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);

功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。

如果返回1表示操作成功,否则操作有误。

注意: 使用前必须已结束总线。

----------------------------------------------------------------*/

/*bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)

{

unsigned char i;

Start_I2c(); //启动总线

SendByte(sla); //发送器件地址 if(ack==0)return(0);

SendByte(suba); //发送器件子地址 if(ack==0)return(0);

Start_I2c();

SendByte(sla+1);

if(ack==0)return(0);

for(i=0;i<no-1;i++)

{

*s=RcvByte(); //发送数据 Ack_I2c(); //发送就答位 s++;

}

*s=RcvByte();

NoAck_I2c(); //发送非应位 Stop_I2c(); //结束总线 return(1);

}

*/

Delay.c

#include "delay.h"

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(65535);

}

}

DelayUs2x(65535);

Pwm.c

#include <reg52.h>

#include"pwm.h"

void Init_Timer1(void)

{

TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

//TH0=0x00;

//TL0=0x00;

EA=1; //总中断打开

ET1=1; //定时器中断打开

TR1=1; //定时器开关打开

} //给定初值

第四章 遇到问题及解决方案

这次单片机的课程设计是我做的所有课设遇到问题最多的一次。

首先,由于一些别的原因吧,我们的单片机课程上的不是很好,拿到题目有一种蒙了的感觉,不知道从什么地方下手,甚至PWM是什么都不知道,数码管怎么驱动也不是很清楚。而对于编写语言,只会简单的汇编语言的应用,C语言学过,但是不知道要怎么用,放假回家从图书馆借了两本书啃完了才明白了一些

其次是我们的板子,对于我们的题目,需要用到A\D转换芯片,需要电位器与A\D的输入端相连,需要六个数码管,还需要一个独立的端口,可是两个班的板子都不能全部满足。本来想用外接的方法解决,可是效果不是很好,没能完成任务,最后上网买了一块新板子,课设才顺利的进行了下去。

在设计的过程中,开始时是比较顺利,对于A\D转换和显示的功能完成的较好,但是再加入PWM波形发生的程序时,怎么也不能正常运行了,后来在隔壁班同学的帮助下,仔细的研读程序和相关的文献,找到了解决问题的方案。

最后

第五章 设计心得

今天,为期两周的单片机技术课程设计顺利结束了。通过这两周的课程设计,使我对单片机的应用有了新的认识,也使我对于它的应用有了较大的提高. 这次课设,刚刚拿到课题时,我感到有些茫然,对于只是从课堂上片面的学了一点基本原理的人来说,要全部做完的确有一定的难度。由于我对计算机控制和开发板不是很熟悉,在设计的过程中走了不少弯路。

通过亲身体验做课程设计,我觉得安排课程设计的基本目的,在于通过理论与实际的结合,进一步提高观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。我的收获有一下几点:

第一、使我对所学的课程有了更深的了解,更是增强了自己对这方面的兴趣,这对于以后可能从事的职业有极大的好处。

第二、通过课程设计我明白到了理论到实践有一段很远的路程。设计过程中的每一步都是一门学问,我终于知道了每一个实现的过程,每一个认识的过程都存有人类无数的的汗水与对待事物一丝不苟得,缜密的思考以及不懈的努力,只有这样才会有一个新生事物的诞生。而以上种种的过程必须要你亲自去体会去认识去发现,那才是属于你的“收获”,只有这时才会对自己的作品无比的骄傲。 第三、通过这次设计加强了我们的设计创新能力,使我们的理论知识与实践充分地结合。

第四、通过两周的课程设计,我学到了很多书本上学习不到的知识。两周的时间很短,但是我学到比两年的还多,在以后的学习生活中,我需要更努力地读书和实践。

第五、这次课设也增强了我的团队协作能力,对于我的为人处事也有很大的益处。

对我们电子专业的学生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。

在设计过程中,体会到了设计一项课题的不易,也体会到了设计成功之后的小小成就感和同学之间相互合作的默契。更重要的是,通过课程设计,我发现了自身存在的更多不足之处和实际应用能力方面的欠缺,这些不足之处在今后的学习之中要有意识的弥补和改变。

鸣谢

课设前期准备选则开发板时,由于对这个方面了解不是很深,走了一些弯路,后来在电信专业的耐心讲解下,选购到了合适的板子。

在设计过程中,电科一班的杨勇同学对于整体的思路给了很好的建议,而彭雪亮同学则在后期程序的整合方面给出了建设性意见,在这里一并表示感谢。同时也要感谢我们的指导老师,在课设前期课题讲解方面给予的帮助。

参考文献

1 许翏、王淑英主编.计算机技术.北京:机械工业出版社2005

2 王炳实主编.单片机技术.第3版.北京:机械工业出版社2004

3 易泓可主编,基于数字PID设计.北京:机械工业出版社 2004

更多相关推荐:
单片机课程设计总结

单片机课程设计心得体会这个学期的单片机课已经早早的上完了但是理论纯属理论没有与实践的结合总让我们学的不踏实感觉没有达到学以致用的效果所庆幸的是在课程介绍考试完之后老师给我们安排了这次单片机课程设计给了我们学以致...

单片机课程设计及个人心得感受

本科课程设计(论文)单片机控制流水灯的正常工作及外部中断控制灯的亮灭学院名称:汽车与交通工程学院专业:汽车服务工程班级:13汽服B学号:*************姓名:*******指导教师姓名:***二〇**…

单片机课程设计心得体会

单片机课程设计心得体会文章发布课程设计网发布时间20xx0505做了两周的课程设计有很多的心得体会有关于单片机方面的更多的是关于人与人之间关系方面的我们组一共有三个人但其他两个人是真的神龙见首不见尾除了在最后答...

单片机课设报告

燕山大学课程设计说明书题目虚拟电子琴设计学院系电气工程学院年级专业学号学生姓名指导教师教师职称电气工程学院课程设计任务书说明1此表一式四份系指导教师学生各一份报送院教务科一份2学生那份任务书要求装订到课程设计报...

单片机课程设计小结

单片机课程设计小结单片机课程设计小结一做了两周的课程设计有很多的gt心得体会有关于单片机方面的更多的是关于人与人之间关系方面的我们组一共有三个人但其他两个人是真的神龙见首不见尾除了在最后答辩的时候他们一起坐在了...

单片机课程设计心得

课程设计心得课设的选题,方案的设计与确定,元器件的选择,硬件的焊接,这一系列的课设准备工作早在课设开始之前,老师就向我们做了相关的介绍和明确的说明,同时非常友好的提示我们早点着手准备自己的课设项目。但是如此语重…

单片机课程设计总结

单片机基础知识单片机的外部结构:1、DIP40双列直插;2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、电源VCC(PIN40)和地线GND(PIN20);4、高电平…

单片机课程设计

单片机课程设计姓名桂明建学号20xx20xx0211班级1221202专业测控技术与仪器课程名称单片机微机原理及应用课程老师周伟老师单片机IO口的应用摘要本设计随着人们生活水平的不断提高单片机控制无疑是人们追求...

单片机课程设计报告

课程设计报告课程名称微机原理课程设计题目基于单片机的出租车计费系统设计学院环境与化学工程系过程装备与测控工程专业班级学号学生姓名起讫日期指导教师摘要出租车计价器是乘客与司机双方的交易准则它是出租车行业发展的重要...

单片机课程设计

单片机课程设计题目音乐八月桂花香班级姓名指导老师完成日期设计任务书摘要本设计是基于单片机的数字音乐盒设计由单片机AT89C51芯片和LCD显示器为核心辅以必要的电路构成的一个单片机电子数字音乐盒要求利用IO口产...

单片机课设

1目录一引言3二器件介绍4151单片机89C52简介42AD转换器芯片ADC0809简介7374HC138简介9三软件的设计111软件所要实现的功能112程序流程图11四硬件电路设计16五心得体会17六参考文献...

单片机课程设计

基于单片机的数字电子钟序列号论文题目基于单片机的数字电子钟课程名称单片机原理机接口技术LKH12120xx1基于单片机的数字电子钟目录1123456789LKH12120xx2基于单片机的数字电子钟目录2目录1...

单片机课设总结(30篇)