单片机编程心得

2024-10-12 版权声明 我要投稿

单片机编程心得(精选12篇)

单片机编程心得 篇1

1、对于可以设置系统时钟的单片机,延时程序统一先把系统时钟设频率置为最低,然后按这个最低时钟频率写延时

函数,这样的好处:第一,统一了不同系统时钟下的延时;第二,降低功耗

2、对于单片机系统,不同的外部时钟,延时程序对应的时间不同,为了方便使用,加入预编译指令#ifdef/#else/

#endif这样如果预定义了一个系统时钟,则选择相应的延时参数进行编译,而延时程序主体不变,只是里面有

一个延时参数,根据预定义选择相应参数。

二、for循环的处理:

用for(i=XX,i>0,i--)而不用for(i=0;i

对于两层或多层for循环,频繁的循环放在内层,减少循环间跳转花费的时间

三、对外设的操作:可以把外设作为一个文件来操作,比如液晶,就可以把液晶看作一个文件,往液晶打印字符串或

者数据,就可以用fprintf()来做,(51的C标准库不支持,但是可以自己写一个文件操作的库)。只要是输入输出

设备,都试着用文件操作的方法去操作。

四、标准库函数的使用:

1、标准输入输出库(stdio.h):

字符串夹杂变量数字(比如:发送完nihao字符串,然后发送变量i的值)往液晶显示或往串口发送的时候,往串口发

送可以使用格式输出函数printf(“nihao%d”,i);但是往LCD显示就不好做了,通常是写一个数字转字符串的函数,然

后先送原来的字符串,再送数字转换后的字符串,太麻烦,可以使用标准输入输出库里的sprintf()函数来完成,它的原型为:sprintf(char *buffer, const char *format, …),*buffer是要把字符串和变量写入的缓冲区,可以使

用数组或者指针,后面的格式和printf()函数一样;与之对应的还有sscanf()函数,从缓冲区读一个字符串把它

转成相应的类型后赋给指定的变量。

比如:

#include

void PrintToLcd(unsigned char *str)

{

...}

void main()

{

unsigned char *p;

unsigned char i = 50;

sprintf(p,“nihao%d”,i);

PrintToLcd(p);

}

2、字符串库(string.h)

字符串连接(相加)char *strcat(char *dest,const char *stc)

把src连接到dest字符串后面,返回指向dest的指针

字符串比较int strcmp(char *str1,char *str2)

返回值:小于0: str1str2

字符串拷贝1char *strcpy(char *dest,const char *src)

结果把src的内容拷进dest,两个字符串内容相同,返回指向dest的指针字符串拷贝2char *strdup(const char *src)

src:待拷贝的源字符串,返回值:指向拷贝后的字符串的指针

字符串倒序char *strrev(char *s);

返回指向倒序后字符串的指针

3、类型转换(math.h;stdlib.h)

字符串转双精度(类似C++Builder里的StrToDouble)double atof(char *str)字符串转整数(类似StrToInt)int atoi(char *str)

字符串转长整型long atol(char *str)

浮点数转字符串char *ecvt(double value,int ndigit,int*dec,int *sign)char *fcvt(double value,int ndigit,int*dec,int *sign)

输入参数:value: 待转换浮点数,ndigit: 转换后的字符串长度

输出参数:dec: 小数点位置,sign: 符号

返回转换后的字符串指针

整型转字符串char *itoa(int value,char *string,int radix)

输入参数:value: 要转换的数,radix: 转换的进制

输出参数:string: 转换后的字符串

返回指向string的指针

单片机编程心得 篇2

关键词:计数程序,设计修改

1 软件介绍与仿真教学

PROTEUS软件是英国Lab Center Electronics公司出版的EDA (电子设计自动化) 工具软件。 Keil C51 是美国Keil Software公司出品的51 系列兼容单片机C语言软件开发系统。两软件的联合调试是单片机仿真教学的基础。通过实验室仿真实验, 可以使学生深入学习单片机编程技术。起到单纯的理论教学无法企及的教学高度。本文通过0 ~ 59 计数器的基本编程和仿真的变化过程, 来探讨此类仿真教学的特点。

2 计数问题基本编程与创新设计

设计一个计数电路, 在7段数码管上显示。要求按一下按键, 计数器增加一个值。从0开始到59计数。首先在PROTEUS的设计区, 设计对应的电路图。见图1。然后, 使用KEIL C51程序设计对应的C语言程序。如图2所示。

在PROTEUS程序中调用KEIL C51 编译后的HEX十六进制程序, 开始联合调试软硬件程序。程序的调试结果见图3。这是基本程序的的设计与调试过程。当学生按照设计要求, 调试成功基本程序后, 将获得一种成功的喜悦。在基本程序基础上, 对学生提出再次修改的要求。要求学生修改按键的硬件接口电路。软件的相应口定义将随之改变。然后重新仿真整个过程;修改百位计数器的变量值, 使计数由0 ~ 59, 变为0 ~ 10、0 ~ 20、…0 ~ 100, 重复整个仿真过程;将秒脉冲发生器放到按键位置代替按键, 变成秒计数器。通过这些变化, 启发学生积极主动的创新思维, 使学生深入理解与自我单片机设计的精髓, 达到一通百通, 融会贯通的学习效果。实践证明, 使用PROTEUS和KEIL C51 仿真软件, 在基础编程的基础上, 扩展思路中变化设计方案, 可以极大地促进学生的学习积极性和主动性, 提高学生对获得知识的兴趣, 提高学生的自主创新能力。

参考文献

[1]《单片机C语言应用100例第二版》王东峰, 陈圆圆, 郭向阳编著电子工业出版社2013.5

[2]《8051单片机C程序设计完全手册》求是科技编著人民邮电出版社2006.04

单片机编程心得 篇3

【关键词】可编程控制器;单片机;串行通信

串行通信是一种广泛应用于各个领域的通信方式,西门子S7-226可编程控制器与AT89S51单片机的结合作为一种新的串行通信方式,它在工业领域有广泛的运用,无论是从实用性还是灵活度的角度分析,该设计的结构都相对比较简单,且制作成本也相对较低,具有较强的发展价值。

一、参与试验中的通信硬件综述

1、试验中的单片机通信功能概况

AT89S51单片机是一种低功耗,高性能的单片机,包括4k字节的网络服务提供商能够对Flash只读程序存储器反复擦写一千次,另外还有128字节的随机存储器和一个全双工串行通信端口,不仅可以进行网络间通讯,而且还可以实现串行的异步通讯,甚至可作为一个同步的移位寄存器进行使用。一般来说,这种单片机可通过串口的中断实现数据的传输,由于它的串行通信口输出为TTL电平,在外在端口变为RS232端口进行全双工通信时,可以通过相应可靠型号的芯片等进行电平转换。而与外设含有RS-485接口时,则必须选择与之相对应型号的配套芯片实现电平的转换来进行半双工通信。

2、试验中的可编程控制器通信功能概况

西门子S7-226可编程控制器具有13K字节程序的数据存储量,两个9针RS-485端口与24路输入和16路输出,共包含40个数字量的I/O点,支持点至点、多点接口,自由通信等协议。PPI协议作为主从协议中的主站必须按照所要求的指令向从站设备传输信息。而从站设备只有响应的职能却不能够提供有效的信息反馈给主站的一方。PPI协议广泛应用于可编程控制器同触摸屏之间的通讯中。这其中主站是触摸屏,从站是可编辑控制器,通过触摸屏来传输指令,可编程控制器进行响应,但是并不向触摸屏发送反馈信息。而相对于许多的端口来说,可编程控制器允许主站与主站,主站与从站之间的通讯,而如果控制器是相对较大的规模的话,并且这个控制系统具有大量的控制器和集成线路端口,完成通信过程则需要借助其他的协议才能实现。针对自由方式的通信,则可以依据用户的需求对通讯协议进行配置和编程,就可以达成像单片机、打印机和变频器等一系列类似设备之间的联通灵活通信了。

二、参与试验的项目设计

1、参与试验的项目硬件构成

AT89S51单片机同西门子S7-226可编程控制器之间实现信息传输与反馈需要遵守以下流程来实现。西门子S7-226控制器上只有唯一一个RS-485端口,通过此端口接受发送器来连接单片机。因此需要选择有效可靠的端口来达成,可编程控制器所发出的485电平信号就可以通过转换进而变为单片机可以接收的信号,并借助相应形式的串口联结线实现内部寄存器的输入。可编程控制器同单片机间无法同时进行接收和发送主要是由于端口处所使用的是半双工的方式。这样,它们在进行信息的实时发送过程中,需要一个来自外部的硬件握手信号来实现二者的联结。

此次试验项目里在可编程控制器端选用的是1个数字量的输入口I0.0和输出口Q0.0,而内部寄存器端口采用的是并口P1中的P1.0、P1.1以及P1.2。以下是二者實现联结的具体操作事宜:当单片机需要向可编程控制器反馈信息的时候,置位P1.2可通过光耦PC817进行24V高电平向I0.0的输出,当前可编程控制器便是处于接收端的状态,要中断并对接收信息进行相应地设置,微控制器置P1.0低电平时也可以实现与指定端口之间的传输。这样,信息便通过相应的端口向选定好的端口实现传输发送,并且又转换为可编程控制器端口可以接收到的信号。而可编程控制器需要向单片机进行信息的发送时,可编程控制器可借助输出口Q0.0向单片机的P1.1进行高平点的发送,微控制单元进行串口中断的设置,置P1.0作为高电平接收信息。

2、参与试验的项目通信协议的设计

可编程控制器和单片机二者实现串口通信需要借助RS-485来完成,RS-485作为一种标准协议必须规定并提供指定对应的七层网络协议模型中最底层的规定,双方还需要进行其他的一些协议规定,比如字符格式以及波特率等内容。依照参与试验中各个具体项目的实际特性,在传送过程中进行相应的规定,无奇偶校验,并选择相对应的波特率。同时,加入帧校验码或者对起始字符和结束字符进行相应的标准化规定以保障在发送数据时整个通信过程的稳定和可靠。在计算帧校验码的过程中,必须以字节为依据对所传输的数据通过异或运算方式得出最终的数据,将所得结果发送给接收方,后者再进行相同的运算。然后将后者得出的结果与前者相较,如果前后运算结果出现了偏差,那么就要对发送过来的错误信息予以放弃并要求重新发送,数据传输格式如下所示:

起始字符状态信息有效数据帧校验码(FCS)结束字符

实际上,无论什么样的可编程控制器都能够与单片机通过串口完成通信,关键是要掌握该可编程控制器的通讯协议,了解帧的传送格式,这样便可以达成两者之间的串行通信了。

结语

如今,单片机与可编程控制器的结合使用已被广泛应用于许多领域,掌握可编程控制器的通信协议,使其与单片机通过串口完成通信的设计具有重要的现实意义。

参考文献

[1]李生军,李少蒙.单片机与PLC之间的串行通信实现[J].化工自动化及仪表,2010,37(2):78-80.

[2]武德庆.单片机与PLC串行通信数据传输模式实现[J].民营科技,2010,(09).

[3]刘慧龙,陈高辉.单片机与PLC的串口通信设计[J].科技创新与应用,2012,(11).

如何才能有效的学习单片机编程 篇4

要知道单片机是什么?单片机有何用?单片机系统设计的流程是怎样的、需要掌握哪些辅助软件(当然就包括相应的编程语言)?怎样设计算法、写出程序?怎样烧录程序?单片机是怎样工作的?怎样让它能支配机器按照人的需要进行动作?

了解这些之后,我们的学习就有了目标和方向。

至于这些问题的解答,主要应该还是在图书馆或网上的各种资料中寻找!

2、探索

单片机很难学,是因为其内部结构、编程语言抽象,且实际应用中与其他电子技术和元器件知识相互关联,需结合起来一起设计进行开发。

所以,第二阶段要了解单片机的内部结构是怎样的?单片机开发经常会用到哪些电子技术和元器件知识?如何将一条条编程指令组合成一段段有效的程序?并不断尝试,变换各种不同的描述方法,烧录不同的程序观察比较运行结果,分析出现的现象及其原因。这将给你的学习带来很大帮助!并且,程序的成功烧录和运行,也能极大增强你的自信!

3、解密

之所以单片机能成为控制核心,设计出包罗万象的应用系统来,是因为开发者利用了单片机提供的种种功能及各种外设。

因此,第三阶段我们要掌握单片机的各种功能,再加上诸如传感器、模数转换、扫描显示、串行、中断的应用思维,结合更多的元器件、电子电路知识,逐个学习、体会实际的单片机系统的秘密。

4、远航

通过以上三个阶段,大家基本就可掌握单片机的应用了。但要设计出丰富的单片机系统,解决复杂的实际问题,还需要了解更多的外设知识及其与单片机的联系(如电动机、各类存储器、继电器、红外管等)。这些需要不断的学习和积累。有时候,接到一些开发任务,就需要你针对这个任务自觉地去搜集、学习相关知识,在实践中不断学习和提高。

5、总之

1)先通过各种文献资料了解基本结构,掌握必备的基础编程能力;

2)买开发板动手实践,遵从教学视频做相应的更深一步的了解;

3)试着设计算法,编写程序,烧录程序,运行,并分析结果;

4)对程序进行修改,同时观察运行结果的变化,进一步了解单片机的运行及控制原理,总结;

单片机编程心得 篇5

0 引言

编程学习心得 篇6

编程学习心得-02-11 20:14

作为一个不是科班出身、没有正规学习过计算机知识的架构师,想在这里把我这几年学习的经历体验和大家分享一下,谈谈自己对架构师成长之路的一些感想。

奠定扎实的理论基础

千里之行,始于足下!技术不是一蹴而就的事情,而是长时间积累的成果。扎实的基本功是做好所有事情的开始。到现在我还记得对我影响非常大的几本书:

■《C++编程思想》

■《深入浅出MFC》

■《Windows核心编程》

■《数据结构》《编译原理》

我学习计算机正是按照这几本书的顺序,之前学习C的经历就不必说了,而转折点正是《C++编程思想》--它让我感觉到程序和语言竟然这么有意思,至今仍对虚表的.概念记忆犹新,尤其指针的用法,对我以后学习Java语言有很大的帮助,对多态和语言的特性也有了很高的认识。

《深入浅出MFC》这本书,记忆最深刻的还是其中强大无比的宏定义和对象层次设计。然而学习MFC的过程中,我遇到的最大问题就是:很多东西都是黑盒的,这引发了我刨根问底的欲望。所以后来我学习了《Windows核心编程》,这本书给我的最大收获,就是了解了很多操作系统底层的知识,操作系统是如何运行的。不过遗憾的是,如果当时从Linux或者Unix开始学习,应该会了解得更系统一些。

之后我深入学习了《数据结构》和《编译原理》。这是我经过了很多实践以后,又回过头来重新学习。拿《编译原理》来说,以前对这门学科的了解非常有限,后来为了实现一个东西,要用到脚本语言,找来找去找到了Velocity(后来想想使用Groovy应该更好一点),用了以后觉得很好。以前修改程序逻辑,是需要重新编译或者修改配置重新发布才能OK,而现在只需要编辑然后保存一下,就能得到自己想要的结果。这令我着迷,于是想知道它是如何实现的,翻看源代码才晓得原来还有JavaCC这个东西。就这样,我从解释语言入手,逐渐开始了疯狂学习编译原理的过程,越发觉得编程语言非常有意思。

回头想想以前和现在学习的语言,感觉程序语言就是在不断抽象:从汇编、C、C++,再到Java、C#,再到更动态一点的语言如Perl、Python、Ruby等等。不管它再怎么变、再怎么抽象,还是编译原理应用的产物。

单片机编程心得 篇7

引言

中断服务例程是单片机应用系统的重要模块。采集数据是中断程序的主要工作之一, 这个过程较为短暂, 因此要求中断能够及时采集数据, 而对于处理数据的时间是较为宽松的。但是当系统中待处理的中断较多, 会导致程序执行效率降低;如果并发中断较多, 那么系统的性能大大降低了。为了解决中断的实时响应和数据处理耗时之间的矛盾, 通常在整个系统中, 数据采集和标志位设置被放置在中断服务中, 而将数据处理放置在中断的外面;与此同时, 可以采用消息及其消息循环机制来提高系统的效率。将中断产生的标志位看做消息, 将数据处理过程放置于消息循环之外, 可以解决采集数据和处理数据之间的矛盾, 从而提高系统整体的性能。

基于消息循环的编程机制

1 消息驱动机制。在面向对象 (Object Oriented, OO) 的编程模式里面, 通常使用消息机制来实现对象之间的通信过程。程序也是通过消息机制请求对象并进行处理的, 而各个对象之间的通信也是通过消息机制来实现的;在消息结构中, 包含了消息发送者的请求信息, 消息接收对象在获取到消息之后, 可以根据一定的处理机制来处理或者继续分发传递消息。一旦对象产生并发出消息之后会进入消息队列, 也可能不会进入消息队列而被直接传递给对象, 而主程序的作用是负责组织消息队列, 然后分发给消息处理Object。

2消息循环在单片机编程中的应用。单片机是单任务系统, 和传统的WINDOWS操作系统相比, 它不能同时执行多个程序, 而且系统资源相当有限。WINDOWS系统采取消息循环机制, 而单片机系统无法使用庞大的消息循环因此可以采取简化的操作方式, 可以这样来定制消息循环机制:当某个中断 (事件) 产生时, 中断例程会设置标志位状态, 而不同的状态位表示不同类型的消息和内容;而主程序的工作是判别标志位, 从而决定启动消息处理例程 (方法) 。如果采取这样的消息循环机制, 可以有效利用系统的有限资源, 从而实现数据采集例程和数据处理例程的完美结合, 可以大大提高单片机应用系统的整体性能。

基于消息循环机制的单片机多任务系统软件设计

在单片机应用系统软件研发过程中, 通常会使用到各种各样的中断事件处理程序。如果中断程序较多或者中断处理程序内容较多、过程复杂时, 容易导致中断服务例程的性能降低, 处理时间较长;此时如果有额外的中断事件发生时, 单片机控制系统无法及时处理, 尤其是对于像MCS-51两级中断优先级的单片机, 很难实时、快速响应中断事件。而对于实时性较高的中断事件来说, 这种效率很难快速采集数据, 但是对于数据处理的程序例程是相对较为宽松的。

因此, 可以在中断服务例程中完成数据采集的处理以及标致标志位设置的过程, 并将处理数据的过程放置在中断服务例程之外;与此同时, 把中断事件产生的标志位看做是消息结构, 并将处理数据的程序例程放在消息循环程序中, 可以有效优化中断服务例程的结构, 从而提高主程序响应中断事件的速度。另一方面, 这样的程序结构不会影响到数据处理的总体效率。而且采取这样的消息循环机制, 可以有效避免代码重入带来的堆栈混乱、溢出等种种问题。采取基于消息循环驱动的程序结构, 一般都是在主程序中处理消息循环过程, 然后根据消息发送对象的信息来选择相应的处理函数, 接收消息结构的对象则调用响应消息的相关函数;一旦消息响应函数收到主程序发送的消息时, 消息响应函数取得程序的控制优先权, 等该响应函数完成相关的处理过程中, 再将程序控制权交还给主程序, 然后主程序继续执行下面的代码。采取这种消息循环处理机制, 不仅促使程序结构更加清晰、明了, 而且也能够提高单片机应用系统设计的效率, 精简并优化系统结构, 从而提高单片机系统的实际应用能力, 也能提高系统的适应性。

消息循环在单片机编程中的实例分析

1 系统方案设计

下面以一个单片机应用系统实例来分析消息循环机制的应用, 即8051单片机UART接口和PC主机RS232接口进行通信, 在此介绍基于消息循环的处理机制在系统中的应用。

UART接口, 8051序列单片机的UART接口主要用于串行通信过程, TXD端发送数据, 然后从RXD端输入;其中一个SBUF作为发送缓冲区, 另外一个SBUF作为缓冲接收器。UART接口主要用于全双工串行口, 它可以结合驱动芯片实现和PC主机的通信。

2 通信需求分析

(1) 串行口波特率要求

8051单片机UART接口在和RS232C进行通信时, 一般会选择11.06左右的震荡频率。

(2) 通信初始化处理过程

首先确定定时器1的工作模式:使用TMOD寄存器;计算并确定定时器1的初始值:装在TL1和TH1;启动定时器1:设置TCON中的TR1标志位;确定串行口的控制方式:SCON编程;在串行口在处于中断时, 必须开CPU中断, 这通过IE寄存器来实现。

3 编程方法对比分析

在一般情况下, 我们会把中断事件发生处理的工作全都放在中断服务例程中, 而主程序只需要负责初始化系统并且等待消息达到并处理消息。但是这种设计方案存在多方面的问题:

(1) 中断事件服务例程处理事件较长, 此外CPU不会在同一时刻处理同一级别的中断事件。

(2) 采取同样的消息结构可能会带来代码重入的问题, 这样会增加堆栈的内存开销, 从而产生难以预料的结果。

(3) 而使用基于消息循环的编程机制, 则使用中断事件服务程序向主程序的消息队列结构发送消息, 从而分离中断事件服务例程的处理程序, 可以大大提高单片机应用系统的整体性能。

4 消息循环机制的应用

将消息循环处理机制引入到8051单片机UART接口和RS232C接口通信程序中, 其主要的处理过程如下:将通信处理过程分成若干个中断服务例程, 一序列的中断服务例程会向主程序发送相应的消息, 当中断服务例程处理完毕会返回到主程序, 然后由主程序跳转到消息处理函数中;这样一来, 中断事件服务例程只需要添加生成消息, 然后由主程序分发消息到消息处理函数中;而且采取消息循环处理机制可以避免消息处理函数相互调用而产生的代码重入问题, 这样可以有效避免代码重入的弊端, 参考下述中断服务例程和主程序的代码:

结语

编程培训心得体会 篇8

1.不会的一定要问明白,要学会为我所用,看书的时候一定要做好标记,不懂的地方一定要标明是什么意思。

2.在学习的过程中一定要记住动手,不然很容易形成眼高手低的局面,不管什么样的程序都要亲手做过才能说会了,不要整天说我不会学不会,其实是你不想学,只是你下决心抄一个月程序,我保证我能有大的进步,其实当你抄到一周到两周的时候你就会特想抄,因为你会发现程序你能看懂了,能帮别人调程序了,有一种成就感呀!它会让你更加努力的去学习。

3.在培训学习过程中,我建议大家在上课的时候少看课本,课本要在下课的时候看特别是上课前一定要先看看课本,上课的时候呢就不要看了,不要老师讲到那个问题了你马上在书上找,这样不好,会影响你的注意力,其实还真不如注意听老师讲呢?因为你要是一边听一边看课本,你是看到了书上的答案但是老师的思路你没有听到,而要是你不看的话,你听明白了思路,一定是想迫切的看到结果,这个时候看课本才是记的牢固的时候,学习要的不就是个高效率吗?

软件编程实习心得体会 篇9

我们小组所做的是关于学生宿舍的信息管理系统。在这次实习中,我们运用的平台是vs(c#),因为大三的软件工程课也是运用了vs2010,而且大二时学习windows程序设计时用的是MicrosoftVisualStudio,基本一样。而数据库的选择,选用了Access2010,Access供了一个能在办公室环境下使用的、操作简便、易学好用的关系型数据库管理系统,,而我们在大一暑期实习时也学习了这一方面的内容。

通过对老师提供的几个例子的学习,我们开始了我们的数据库系统设计。通过这个学生宿舍管理系统的设计和实现,我们虽然遇到了一些困难,但是最后我们都一一解决了这些问题,了解并掌握了自己对数据库和VS的不足,并且学到了很多东西。

数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当、正确反映数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。

设计完我们的数据库,我们就开始了VS2010和Access的连接。但是在最开始的时候,我们只知道这两个独立的工具,对于它们的连接可以说是一无所知,通过学习,我们终于了解了,数据库与vs2010连接要先创建数据容器,创建数据集,填充数据集,从而把数据库中的数据显示在vs2010的控件中,学习过后才感觉到不是东西太难,而是我们对新事物的恐惧和不了解。

如果说数据库的连接是我们工作的第一步和最基础的一步,那么接下来怎样对数据进行增添,删除和修改是很关键的问题。数据库与VS的连接一定要有,不过在数据更新之前,肯定要在vs2010控件中实现数据修改的实现工作,然后更新到数据库中,这不仅仅涉及到了数据库的问题,同时要对vs2010中的控件的功能和一些固定函数有所了解。例如我们在做dataGridView控件内容的修改,添加,删除,还原,以及对数据库内数据的更新的时候,就碰到了一些困难,主要是对dataGridView控件的一些属性和函数不了解。通过后来的查书和网络查询,我们才发现原来很多东西都是我们不知道的。

对于数据的修改和删除的关键之处在于对数据的选择,而这恰恰是关于dataGridView的属性了解。同学间的相互讨论最终解决了这个问题。

具体到数据的添加、修改、查询、修改后需要运用SQL语言,我们在大三学过SQLserver,而,SQL语言的基本语句是一样的。因此在简单回顾数据库的书后,我们队气加深了印象,在vs平台下进行操作需要加双引号,这使得代码有些繁琐,第一次编写时尝尝吧单引号,“+”和双引号弄混,所以这时候需要耐心,仔细地查找错误,又一次甚至因为一个小括号的中文输入和英文输入造成了几个小时没找出错误,弄得我们都很郁闷。

当对主要的操作界面设计完后,我们需要将它和登录界面进行相连,但是一个上午,我们用调用Form,却发现虽然界面调用了,可是另一个Form无法对数据库进行连接,我们左思右想,始终找不到解决的办法,于是我们只能想办法把所有的界面放在同一个Form中,而解决这个问题是办法是用很多个groupBox,按照设计要求对其实现可见和不可见。这样才解决了这一个艰巨问题。

在最后的检查工作,我们需要对代码进行修复和完善。这时候要体现系统的用户友好型,对用户的错误操作进行有请提示。对于条件的判断,更需要细致的逻辑思维。

软件编程综合实习已经告一段落,但在实习中我们收获颇多。这是我们完成的第一个数据库系统,也是到目前为止最为完善的系统。这一过程,我们掌握到了软件开发的一系列步骤,这能应用到今后的工作生活中去。我相信能给我们带来很大的帮助!

我们需要对整体有个了解,然后细致地一步一步做下去。有很多东西,我们不可能都掌握得很彻底,但是我们可以对其进行了解,知道有这么一回事,所以开始前浏览SQL宝典和c#的书是非常必要的。当了解后,我们可以利用资源丰富的网络进行查询,这样会事半功倍。另外对于困难的问题,如果投入过多时间还是不能解决,那么就须要选择另外一种方法,不能堵死在一条路上。

在本次实习中我们遇到的没能解决的问题,我们会在接下来的时间中全力解决。

同时,我觉得自己要在以下几个方面加以注意:

首先,在编程的时候要注意理论联系实际。注意将课本上的知识应用到日常的操作中,真正做到学以致用。只有这样,才能做到目的明确,才能有足够的学习动力。

单片机编程心得 篇10

方案一:采用模拟开关实现程控增益放大器。如图1所示,模拟开关可由数字编码控制以选通电阻网络中的不同阻值。该方案实现简单,但其缺点是放大倍数级差变化较大,可调范围较小。

方案二:利用数字电位器与运算放大器构成程控增益放大器,如图2。其特点是,可实现量程多级变化而且线路简单,但由于数字电位器制造工艺等因素限制,其通频带受限。

方案三:利用D/A转换器实现程控增益放大器,如图3。D/A转换器内部有一组模拟开关控制的电阻网络,与运放一起可组成可控增益放大器。该方案能很好的实现数字控制。

综上所述,方案三中采用D/A转换器组成的可编程放大器,具有较好的微机接口功能,使得其实现电路简单、可靠且通频带能满足题目要求,故选择方案三。

2系统设计一硬件设计

2.1稳压电源模块

稳压电源电路采用三端固定式稳压器,220V交流信号经变压、整流、滤波,再通过7812、7912、7805产生稳定电压给系统供电。在电路中,芯片输入端和输出端与地之间除分别接大容量滤波电容外,另外我们还需在芯片引出脚根部接小容量电容到地,分别用于抑制芯片的自激振荡和压窄芯片的高频带宽,减小高频噪声。

2.2程控放大模块

为了易于实现最大60dB增益的调节,可以采用D/A芯片DAC0832的电阻权网络改变反馈电压进而控制电路增益。又考虑到DAC0832是一种廉价型的8位D/A转换芯片,其输出其中Dn为8位数字量输入的二进制值,可满足256挡增益调节,满足题目步进0.25db的精度要求。它由CMOS电流开关和梯形电阻网络构成,具有结构简单、精确度高、体积小、控制方便、外围布线简化等特点,故可以采用DAC0832来实现信号的程控衰减。但由于DAC0832对输入参考电压Vref有一定幅度要求,为使输入信号在mV~V每一数量级都有较精确的增益,最好使信号在到达DAC0832前经过一个适应性的幅度放大调整,再通过DAC0832衰减后进行相应的后级放大,并使前后级增益积为60dB,与DAC0832的衰减分母抵消,即可实现程控放大。

2.3功率放大模块

题目中要求,输出能够带50Ω电阻负载,而输出电压峰峰值最大可达20V,则其要求最大功率为:故要对其进行功率放大。为避免交越失真带来的信号失真,采用甲乙类双电源互补对称电路(图4)。

2.4极性变换模块

单极性信号是指输出信号大于0,双极性信号则是指输出既有大于0的部分也有小于0的部分。因此,采用加法电路的方式将双极性信号变为单极性信号。

2.5 AGC功能模块

根据题目要求,要实现自动增益控制,使信号输出峰峰值在2到3V之间。设计该模块时,用STC52单片机内自带的AD转换器对输出信号峰值实时采样并调节内部增益,从而控制输出信号峰值(图5)。

2.6键盘及显示模块

为满足,增益可设置、步进以及功能选择,本系统采用4×4矩阵式键盘以节省单片机IO资源;显示部分最高显示增益为1000,故采用4为一体的共阴极数码管。

3误差分析

造成误差的原因有:(1)运放零点漂移。由于运算放大器的零点漂移,温度漂移等带来的误差,可以通过温度补偿措施来解决此误差。(2)采样电阻自热效应引起的误差。由于电阻在温度上升时阻值会发生变化,因此会引起温度飘移,给系统带来测量的误差。(3)A/D,D/A转换误差。受AD转换器精度及基准源稳定程度的限制,不可避免地带来一定的误差,为了更精确的输出恒流电源,必须选用更多位数的AD、DA芯片。(4)因外界突发干扰或仪表显示值等引起的随机误差或粗大误差。(5)纹波对电流输出的影响。

减小误差方法:采用屏蔽的方法、远离容易产生势骚动或脉冲工作方式的器件、减少IC供电电源的纹波等可减少由IC外部干扰产生的纹波。对选择低噪声的运放是解决问题的一种方法,但不幸的是大多数产品目录中均未列出噪声指标。根据少数运放的该项指标知道,其低频噪声(0.1 Hz~10Hz)电压的峰一峰值为(0.1μV~20μV),因此,选择满足1×10-6稳定度要求的运放也不是很容易的。另外,在输出接近低频直流时,运放的失调电压和失调电流也是产生低频噪声的源泉,特别是失调电流,在选择运放时亦应注意。消除高频噪声可采用交流负反馈来提高运放的交流放大倍数和拓宽频带,但将造成增益降低。解决的办法是在运放前加一级晶体管或场效应管的差分级,由于分离元件便于精选,故可改变整个比较放大器的噪声指标。

4结语

数控可编程放大器可以实现以下功能:(1)输出增益范围:0.5~1000;(2)具有“+”、“-”步进调整功能,步进增益0.5或5;(3)显示输出信号增益与实测增益的测量误差的绝对值≤测量值的5%;(4)输出级功率放大可以带50欧负载。

本设计制作完成了题目要求的基本部分的全部要求和发挥部分的大部分要求,而且增加了部分功能。

目前,在电子仪器,设备中经常要用到信号增益变换电路,有时要求输出可预置,并当负载在一定范围内变化时应具有良好的稳定性,而且精度较高。该设计完全如果再经过结构优化,将具有良好的市场前景。

参考文献

[1]全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛训练教程[M].北京电子工业出版社,2005.

[2]全国大学生电子设计设计竞赛组委员会.全国大学生电子设计竞赛获奖作品汇编(第一届-第五届)[M].北京理工大学出版社,2004.

[3]李银祥.数控电流源[R].武汉:武汉理工大学测试中心,2001.

[4]秦迎春.利用AD7542实现程控电流源[J].国外电子元器件,2003,6:32-33.

[5]张智杰.AD574在数据采集中的应用[J].国外电子元器件,2003,6:55-56.

单片机编程心得 篇11

很多的说法都是这款软件很容易学,看样子也差不多是这样的了,我从一个星期前弄到它,便想尽一切办法学习,当然是从最初的学,可是对于作图来讲,与AUTOCAD相比实在是不好用,不大容易上手,一个简单的命令要绕许多的弯路,点好几次鼠标.犹其如我一样的才发现它,一点不熟悉,对于实体来讲,与3DSMAX相比又多出许多意外来,对于二维图形修改为三维图形有着太多的限制,感觉是很不好的.只是大多数人学这款软件的目的不过就是拿到机床上去帮助解决实际问题,帮着自己编程序,即使只是用于最简单的车床上用也可以使人少磨许多脑筋.尽管前些天看过一个印度工程师写的书上说,用这个软件来做车床实际的价值并不大,说是手工编程更容易控制一些,而且软件毕竟有着它必然的缺陷,不能依赖它.可是我仍然迫不及待的想要把它搞懂,但是这方面的书太少了,书店即使有这方面的书也多是UG方面的,至于是什么原因就不大清楚了,也许只是一般的职业学校里才会有这样的教程可学,网上也没有几本是可以学的,没有办法,去买了两本,全是些古板的类乎电视上看见的清政府的翻译官的说话,只是把那几个字,那些标签告诉你一个他认为正确的意思.半天也不明白他倒底说的是什么意思.下面就是这几天学习的心得,展出来给大家踢.做数控车床编程,当然是拿到样图以后,把它复制到自己的MC界面上.如果别人发给的图形可以直接由“档案“—“档案转换”—“读取”而录入本软件中是最好的了.就如下图

只要标注的尺寸与你的系统一样,就可以把这个图的下半部分删掉,然后点击回主功能表,找到转换—平移,再串联,部分串联,在图中点一下你弄出来的图形,如果这图经过许多次修改,可能有许多的图层,虽然你看不见,但是同样的线条的下面还有着许多的线条,这时候你就会得到系统的提示,说是该串联怎么的了,不要着急,通通的删掉后重新画一次罢.关键的问题是你要把该工件的右端面中心,也就是通常在数控车床上讲的工件坐标原点,与本软件的系统原点重合,如:回主功能表---转换---平移---窗选—距形—范围内—然后在视图中框选全部图形:执行—两点间---再到视图中点选工件的右端面中心点,只点一次,然后移动光标指向菜单,点击原点,随即跳出一个对话框,如果一切操作正确,就可以点击确认,操作有误就点取消重来.按下F9视图显示如下图.这样最终生成的NC程序才会正确.根据图形分析,这个工件最大直径是28毫米,长度为76毫米,应当选择直径大于28毫米,长度大于76+夹头位置+切断槽位置的棒料,切断刀通常是4毫米宽,再考虑车床刀具本身应当占有的位量,这根棒料我选为直径32,长度140,用过以后,别的短工件还可以使用这根棒料.现在先要设置机床与棒料的装夹:回主功能表---刀具路径---工作设置.如下图

一般设定就默认它罢,在边界设定对话框中,是左主轴就点左,是右就点右,夹头也是一样,这时候就要在参数中填入具体的数值.如下图

选的棒料长是多少,直径是多少,就填在相对的框框中去,至于基线,我们已将工件的坐标原点设在了右端面中心,基线一栏只能填0,而为了避免工件端面不平整造成的麻烦,要车端面对刀,就把右侧边缘设为2,外径比实际工件值大了4毫米,那么就在外径边缘中填入2,两边加起来也就是4嘛.夹头参数合理设置以后点击确定如下图,但是这样的工件往往在加工中会出现问题,刀具加工到工件左端倒角位置时容易出现刀具与工件碰撞的情况,工件本就要切断,不妨把左端切断位也画出来,这样就不会出现问题了.在实体验证以及实际生产中一样是有用的.这时候就可以进行刀具路径的设置了,回主功能表点击车端面,出现对话框,如下图在其中最重要的就是选择刀具,和背吃刀量,进给,进退刀向量的设置等诸参数的设定,如果没有操作经验的人想要平白的生成一个程序,就说这东西我能制造出来,你把车床给我.显然是不行的, 如果没有自己的刀具库,只是想要试一下自己的操作是不是有问题,就双击系统列出的第一把刀,确定刀具参数,通常车端面也就把主轴转速定在500左右,进给调高一点,比如进给率为2,实际的操作规则是怎样的要看所使用的刀具,和所切削的材料是什么,去确定这两个数据.只MASTERCAM9.1在数控车的时候下一步就是车端面的参数确定了.如下图

多看看该对话框也就会明白各个框框中的数据应当怎样确定,进刀延伸量也就是刀具每车一刀到达以及返回的那个点与工件表面的距离,粗车步进应当由背吃刀量与精车预留量和主轴进给来确定,为了避免毛刺,X方向的过切量值可以大于0.点击确定,系统自动的就生成了刀具路径,并且简单的标示于你的屏幕.下一步就该粗车了,回主功能表,点击粗车---串联---部分串联,然后在视图中点击右工件右端面那条线,会闪出箭头,方向须向上,如果不是,就回主功能表中点击反向,然后根据系统提示,点击最后一根线,工件左端的一条线,出现一向左箭头

再点击执行,跳出下图的对话框:

单片机学习心得 篇12

一直想写一个帖子,将自己学习单片机的经历、经验和方法总结一下,今天终于动手写了,呵呵,这是我学习单片机的经验、心得、方法。希望对大家学习单片机有所帮助。

经常在群、论坛里看到有人问:怎么学单片机?也常看到有人说学了好几个月可就是没有什么进展。当然,受限于每个人受到的教育水平不同和个人理解能力的差异,学习起来会有快慢之分,但我感觉最重的就是学习方法。一个好的学习方法,能让你事半功倍,这里说说我学习单片机的经历和方法。

05年的时候,因为制作FM发射采用了BH1415的芯片,需要用到单片机控制,所以开始接触使用单片机,虽然以前读书时作为一门功课学过,不过也快丢荒了10年了,基本上都忘光了,也算是从头学起了吧。我当时是买了一块实验板,很简单的功能,比论坛实验板还要少功能,还有一个仿真器,也是比较简单的,SST芯片的。然后开始从大家都知道的流水灯写起,万事开头难,第一个程序基本上就抄人家的,翻查了一份快速入门的学习资料,写下第一个程序。然后,在仿真机是单步的看运行结果,从每一步执行,都硬件上反应出来的效果,很快,对单片机的运作有了一个非常感性的认识,这跟只看书然后自己想象运行是完全两码事。然后,是进一步的其它程序学习,一个月时间,基本上已经熟悉了51的各种硬件资源。把流水灯,数码管动态扫描,中断等等的学习了,然后就是写综合性的程序,也就是我发在论坛里的时钟。通过这个程序的编写,使自己的编程水平有了很大的飞跃。之后,就是逐步学习编写更多的程序,各种外围器件的控制等等,通过编写程序使自己不断的提高。在学过汇编之后,我又转到了C语言学习,因为以前没有学习过C语言,一切都很陌生,所以自己沿用了学习汇编的方法,大约花了3天功夫基本就对C语言有了初步的了解,然后就是尝试写上面所说的时钟,以汇编程序的思路作为参考,以C语言来编写,花了几天功夫完成了这一程序,也实现了从汇编编程为主到C编程为主的转变。然后,就是以C语言编写外围器件的控制程序,以此来熟悉C的编程风格,一直到现在,基本上就是C语言编程,汇编已经是作为调试程序的辅助。

下面我概括了几点我的学习经验和心得体会:

1、万事开头难、要勇敢迈出第一步。开始的时候,不要老是给自己找借口,说KEIL不会建项目啦、没有实验板啦之类的。遇到困难要一件件攻克,不会建项目,就先学它,这方面网上教程很多,随便找找看一下,做几次就懂了。然后可以参考别的人程序,抄过来也无所谓,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序,要做的工序不会差多少,总得建个项目,再配置一下项目,然后建个程序,加入项目中,再写代码、编译、生成HEX,刷进单片机中、运行。必须熟悉这一套工序。个人认为,一块学习板还是必要的,写好程序在上面运行一下看结果,学习效果会好很多,仿真器就看个人需要了。单片机是注重理论和实践的,光看书不动手,是学不会的。

2、知识点用到才学,不用的暂时丢一边。厚厚的一本书,看着人头都晕了,学了后面的,前面的估计也快忘光了,所以,最好结合实际程序,用到的时候才去看,不必说非要把书从第一页看起,看完它才来写程序。比如你写流水灯,完全就没必要看中断的知识,专心把流水灯学好就是了,这是把整本书化整为零,一小点一小点的啃。

3、程序不要光看不写,一定要自己写一次。最开始的时候,啥都不懂,可以抄人家的程序过来,看看每一句是干什么用的,达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次,你会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。。当你自己能写出来的时候,说明你就真的懂了。。

4、必须学会掌握调试程序的方法。不少人写程序,把代码写好了,然后一运行,不是自己想要的结果,就晕了,然后跑到论坛上发个帖子,把程序一贴,问:为什么我的程序不能正常运行?然后就等别人来给自己分析。这是一种很不好的行为,应该自己学会发现问题和学会如何解

决问题。这就需要学习调试程序的方法,比如KEIL里,可以下断点啦,查看寄存器内容等等,这些都是调试程序的手段,当你发现你写的程序运行结果和你想象中不一样的时候,你可以单步,也可以下断点,然后跟踪,查看各相关寄存器内容,看看程序运行过中是不是有什么偏差,找出影响结果的地方,改正过来。这一个过程非常重要,通过程序的排错,你可以学到的知识是书上得不到的。

5、找到解决问题思路比找到代码更重要。我们用来控制周边器件,达到我们想到的目的,这是一个题目,而如何写出一个程序,来控制器件按你想要的结果去运作,这个就是解题的思路。要写程序,就得先找到解决问题的思路,你学会找出这个解题思路,比你找到代码更为重要。不少人很喜欢找人家的代码,有的人甚至有了代码就直接复制到自己的程序中,可以说,这不是一种学习的态度,无助于你编程水平的提高。我几乎不怎么看人家的代码,多数时候是看别人的思路,有方框图最好,没有的话文字说明也可以,要从代码中看出别人处理问题的思路,是相当困难的,特别是大型的程序,看起来是非常的累人,所以现在我也明白了,以前读书时说的程序流程图很重要,现在算是知道了。当你知道一个问题怎么去解决了,那么剩下的只是你安排代码去完成,这就已经不是什么问题了。举个例子:数码管动态扫描,没写过的初学者可能搞不清是怎么回事,其实,就是分时让每一时间段时只控制一只数码管显示数字,几只数码管轮流显示,由于速度很快,人眼的看起来是全部数码管都亮的。明白是这么一回事,事情就好办了,剩下的事情,无非是你安排让一只只数码管轮流显示出相应的数值。显示数字,然后延时一下,再下一只显示数字,延时,知道是这样,我们实际程序上只要做到这样就可以:往段口送段码,然后打开位选显示一只,延时一下,再关闭位选,再送出段码,再打开另一只位选..仅此而已。有了解决问题的思路,我们就能问题拆分开来,然后逐一的解决,如果动态扫描的原理都没懂,不知道如何做,那么这个程序是怎么也写不出来的。

6、开动脑筋,运用多种方法,不断优化自己的程序。想想用各种不同方法来实现同一功能。这是一个练习和提高的过程,一个问题,你解决了,那么你再想想,能不能换种写法,也可以实现同一功能,或者说,你写出来的代码,能不能再精简一点,让程序执行效率更高,这个过程,就是一个进步的过程。很多知识和经验的获得,并不是直接写在书让你看就可以得到的,需要自己去实践,开动脑筋,经验才能得到积累,编程水平才能有所提高。

7、看别人的代码,学习人家的思路。这个在学习初期是很有用,通过看别人的代码,特别是有多年编程经验的人写出的具有一定水平的代码,可以使自己编程水平得到迅速的提高,同时,也可以结合别人的编程手法,与自己的想法融合在一起,写出更高水平的代码,从中得到进步。但要注意,切忌将学习变成抄袭,更不是抄袭完了就认为自己学会了,这样做只会使你退步。

8、尝试编写一下综合应用的程序。从流水灯学起,到动态扫描,再到中断,那么,你可以试试写一下时钟这种综合性应用的程序,不要小看时钟,要写好它不是一件容易的事情,它包括了单片机大部分的知识,比如有按键(IO读取)、动态扫描(IO输出)、中断等,如何协调好各功能模块正常工作,才是编程者需要学习的地方,当你单独写一个功能的时候,比如按键读取,你可能感觉很容易,因为你的程序啥也不做,只是读按键。但把它和其它功能混合在一起,如何在整个程序运行中使每一部分都正常工作,这就不是写一个按键读取这么容易的事情,功能模块之间有可能会互相影响,比如你需要让数码管既能显示,又要去处理按键读取,怎么使这两部分都正常工作,这就是一个协调过程。当你有了这个处理协调能力,你就算是入门了。

9、着重于培养解决问题的能力,而不是具体看自己编写了多少代码或者做过什么。“学单片机重点在于学习解决问题的思路,而不是局限于具体的芯片类型和语言”这一直是我的座右铭,是我学单片机多年来感悟出来的。经常看到有人说“你会驱动XX芯片,真牛啊”“你搞过XX项目,真厉害”之类的话,其实这是非常片面的,搞过XX芯片,搞过XX项目,只能说明你做过这一项目,它只是你的业绩,并不是代表能力就一定高。真正的能力应该是:“遇到没有解决过的问题或器件,能利用自己已学的知识,迅速找到解决问题的方法。”这个才是能力。写程序的过程就是一个创造的过程,几乎没有完全一样的项目,每次你遇上的几乎都不相同,所以你拥有的必须是你面对新项目时的创造能力,而不是标榜着你以往做过多少项目。当然,业绩也能从另一侧面反映你的经验和水平。

10、如果有可能,多学习计算机专业的知识,比如数据结构等。这些是你解决问题的基础知识,你把这些知识应用得越好,就会发现越容易找到解决问题的方法,这就是为什么一个学计算机专业的人编的程序和一个非计算机专业的人编的程序有差异的原因。也是一个菜鸟进军到高手所要配备的知识。如果我们把编程分为宏观编程和微观编程,那么微观编程就是写具体的代码,比如控制某某器件的语句;而宏观编程就是如何对整个程序进行布局、安排,使功能模块以你想要的方式去运行,得出你想要的结果。如前所说“会控制XX器件”这些只能算是微观编程,能做到这一步还只能算是菜鸟级别,如果面对一个新的器件,你心里没底,没把握去写这个控制程序,那说明你还是一个初级的菜鸟。当你有了一定的编程经验,控制过相当数量的器件之后,你就会发现,控制器件这些工作都是相似的、重复的工作,体现不出编程的水平,最多也是写得好与不好的差别,只能算是一些小技巧的应用。而对整个程序进行布局、安排这些才是最头痛的事情,能达到宏观编程和微观编程都做好才是真正的高手。对于规模越大的程序,越能体现出这一点。

11、面对一个新项目时,多自己开动脑筋,不要急于找别人的程序。有不少人面对一个新项目时,第一步想到的就是网上找别人写过的代码,然后抄一段,自己再写几句,凑在一起就完成任务,这虽然可能是省时间,但绝对不利你的学习。当你接到一个新项目时,应该先自己构思一下整个程序的架构,想想如何来完成,有可能的话,画一个流程图,简单的可以画在脑子里,对程序中用到的数据、变量有一个初步的安排,然后自己动手去写,遇到实在没办法解决的地方,再去请教别人,或看别人是怎么处理的,这样首先起码你自己动过脑想过,自己有自己的思路,如果你一开始就看别人的程序,你的思维就会受限在别人的思维里,自己想再创新就更难了,这样你自己永远也没办法提高,因为你是走在别人的影子里。

12、多利用网络的搜索,学会提问题。一般来说,学习过程中,你遇上的问题,前人们多数也有遇上的,所以如果有什么不懂,在自己解决不了的时候,最好先到网上搜索一下,看能不能找到答案,找不到再到论坛里发问,发问也要有目的性,尽量简单明了的描述问题,让帮助你的人可以用最少的时间就看懂你说什么,毕竟人家帮助你是免费的,时间也是有限的。

上一篇:小学如何培养学习动机下一篇:三年级上册古诗连线