篇一:i/o口(独立键盘和数码管实验心得
单片机系统设计报告
单片机系统设计
专业班级:姓
名:班级学号:指导教师:成
绩:
实训报告
电子信息工程技术101班
喜欢单片机实训
不喜欢写单片机实训报告
XXXXXX
1/2单片机系统设计报告
摘要:单片机最小系统基本电路由电源、复位及振荡电路组成。此系统采用单片机AT89C58作为控制器,兼容RS232标准的芯片MAX232单电源电平转换芯片、D9插口实现串行输入;复位电路采用手动复位方式,简单方便;振荡电路采用单片机引脚XTAL1、XTAL2跨接石英晶体振荡器和30pf的微调电容,12MH晶振构成一个稳定的自激振荡器,使得单片机能够以此作为时钟控制信号。同时,通过对I/O端口进行扩展,实现简单的蜂鸣器的驱动,流水灯显示、4×4矩阵式键盘功能,DS1302实时时钟芯片时钟的实现,光敏电阻,AD转换,驻极体话筒,可实现声光采集,进行光度检测,声光控制的楼梯灯模拟等。AT89C58作为整个系统的控制部分,功能扩展电路的程序设计采用C语言在Keil的编辑器上编程实现。经过反复调试和测试,系统基本达到设计目标,各项拓展功能均已实现。此系统的完成有利于学生的动手操作能力
关键词:单片机系统、Keil编辑器、功能扩展电路、动手能力
目录
2/2单片机系统设计报告
摘要………………………………………………………………………………………………………I关键词……………………………………………………………………………………………………II实训目的…………………………………………………………………………………………………4实训内容及要求…………………………………………………………………………………………4小组成员…………………………………………………………………………………………………41、实训内容1.1单片机最小系统
1.1实训内容1.1:单片机最小系统的制作要求……………………………………………………41.2实训内容1.1:单片机最小系统的制实训心得…………………………………………………52、实训内容1.2流水灯
2.1实训内容1.2:编程实现流水灯要求……………………………………………………………52.2实训内容1.2流水灯电路原理分析…………………………………………………………52.3实训内容1.2流水灯程序流程图……………………………………………………………62.4实训内容1.2流水灯程序代码………………………………………………………………62.5实训内容1.2流水灯实训心得………………………………………………………………63、实训内容1.3数码管动态扫描
3.1实训内容1.3数码管动态扫描显示要求……………………………………………………3.2实训内容1.3数码管动态扫描显示电路原理分析…………………………………………3.3实训内容1.3数码管动态扫描显示程序流程图……………………………………………3.4实训内容1.3数码管动态扫描显示程序代码………………………………………………3.5实训内容1.3数码管动态扫描显示实训心得………………………………………………4、实训内容1.44x4矩阵按键
4.1实训内容1.4:4x4矩阵按键要求……………………………………………………………4.2实训内容1.44x4矩阵按键电路原理分析…………………………………………………14.3实训内容1.44x4矩阵按键程序流程图……………………………………………..……14.4实训内容1.44x4矩阵按键程序代码………………………………………………………114.5实训内容1.44x4矩阵按键实训心得………………………………………………………125、实训内容2.1基于RTC制作一个时钟。
5.1实训内容2.1基于RTC制作一个时钟要求…………………………………………………125.2实训内容2.1基于RTC制作一个时钟原理分析……………………………………………125.3实训内容2.1基于RTC制作一个时钟程序流程图…………………………………………135.4实训内容2.1基于RTC制作一个时钟程序代码……………………………………………165.5实训内容2.1基于RTC制作一个时钟实训心得……………………………………………16、实训内容2.2基于RTC时钟的单次闹钟
6.1实训内容1.2:基于RTC时钟的单次闹钟要求………………………………………………16.2实训内容1.2基于RTC时钟的单次闹钟电路原理分析……………………………………16.3实训内容1.2基于RTC时钟的单次闹钟程序流程图………………………………………16.4实训内容1.2基于RTC时钟的单次闹钟程序代码…………………………………………16.5实训内容1.2基于RTC时钟的单次闹钟实训心得…………………………………………167、实训内容4.1光强检测仪
7.1实训内容1.2:光强检测仪要求………………………………………………………………267.2实训内容1.2光强检测仪电路原理分析……………………………………………………267.3实训内容1.2光强检测仪程序流程图………………………………………………………27.4实训内容1.2光强检测仪程序代码…………………………………………………………27.5实训内容1.2光强检测仪实训心得…………………………………………………………28、实训总结与心得……………………………………………………………………………………23/2单片机系统设计报告
1.
实训目的《单片机原理与应用》是一门理论性与实践性都较强的专业课程,对培养单片机开发与应用能力有重要作用。实训环节是对课程理论的巩固,也是学生掌握课程核心内容的一种有效途径和方式,通过实训可以使学生熟悉单片机项目的开发流程、熟练掌握单片机的硬件及软件编程。
课程设计应强调以能力培养为主,在独立完成设计任务问题的能力的培养与提高,主要包括以下方面:
1.
独立工作的能力和创造力。
2.
综合运用专业及基础知识,解决实际工作技术的能力。
3.
查阅图书资料、产品手册和各种工具书的能力。
4.
使用Protel等EDA工具进行单片机硬件系统的能力。
5.
基于KeilIDE开发单片机应用程序的能力。
6.
写技术报告和编制技术资源的能力。
二:内容及要求
制作基于8051单片机的最小系统,并在此基础上按照课程设计实现以下功能:
1.
编程实现流水灯。
2.
使用动态扫描的方式在实验板的LED数码管上显示本人学号后四位。
3.
对每个按键进行编码,然后用数码管显示按下的按键。
4.
基于单片机定时器或者RTC制作一个时钟。
5.
在实现了时钟的基础上制作一个单次闹钟,当当前时间与闹钟时间相同时,蜂鸣器响,只有当有人按下按键时,蜂鸣器才停止鸣叫。闹钟的时间通过按键设备。
6.
焊接调试光明电路,并使用AD转换器对光照度的输出进行采集,然后用LED显示。
小组成员:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
实训内容1.1:单片机最小系统的制作
实训要求:按照老师发送的元件,在规定的时间内焊接完成单片机最小系统。
实训内容1.1实训心得
按照老师发送的元件,在规定的时间内焊接完成单片机最小系统。虽然不用我自己画PCB板,不用我们自己布局,只要求我们按照指导书上的原理图,焊接完相应元器件就可以了。我们组一个模块一个模块的焊接,以确保不会焊错或焊漏了某一个元器件。不过元器件的焊接是有一定要求的。
焊接是电子产品组装过程中的重要环节之一。如果没有相应的焊接工艺质量保证,则任何一个设计精良的电子装置都难以达到设计指标,在焊接时,必须做到以下几点:
1.焊接表面必须保持清洁
4/2单片机系统设计报告
即使是可焊性好的焊件,由于长期存储和污染等原因,焊件的表面可能产生有害的氧化膜、油污等。所以,在实施焊接前必须清洁表面,否则难以保证质量。
2.焊接时温度、时间要适当,加热均匀
焊接时,将焊料和被焊金属加热到焊接温度,使熔化的焊料在被焊金属表面浸湿扩散并形成金属化合物。因此,要保证焊点牢固,一定要有适当的焊接温度。
在足够高的温度下,焊料才能充分浸湿,并充分扩散形成合金层。过高的温度是不利于焊接的。焊接时间对焊锡、焊接元件的浸湿性、结合层形成都有很大的影响。准确掌握焊接时间是优质焊接的关键。
3.焊点要有足够的机械强度,元器件要紧贴着板子的表面。
为了保证被焊件在受到振动或冲击时不至于脱落、松动,因此,要求焊点要有足够的机械强度。为使焊点有足够的机械强度,一般可采用把被焊元器件的引线端子打弯后再焊接的方法,但不能用过多的焊料堆积,这样容易造成虚焊和焊点与焊点之间的短路。
4.焊接必须可靠,保证导电性能
为使焊点有良好的导电性能,必须防止虚焊。虚焊是指焊料与被焊物表面没有形成合金结构,只是简单地依附在被焊金属的表面。在焊接时,如果只有一部分形成合金,而其余部分没有形成合金,则这种焊点在短期内也能通过电流,用仪表测量也很难发现问题。但随着时间的推移,没有形成合金的表面就要被氧化,此时便会出现时通时断的现象,这势必造成产品的质量问题。
总之,质量好的焊点应该是:焊点光亮、平滑;焊料层均匀薄润,且与焊盘大小比例合适,结合处的轮廓隐约可见;焊料充足,成裙形散开;无裂纹、针孔、无焊剂残留物。
实训内容1.2:编程实现流水灯。
实训要求:实现L1亮其它灭→L2亮其它灭→L3亮其它灭→……L8亮其它灭→L1亮其它灭的流水灯的功能了。
实训内容1.2流水灯电路原理分析
LED电路的原理图如下图所示。8个LED灯的8个正极连在一起和一个开关串联后与电源VCC相接。LED的负极与P0口相接。如果要LED灯亮,只要让开关接通,然后P0口送一个低电平。与P0口相接的LED接通开关后,P0送低电平的LED会亮,送高电平的LED不会亮。只要让P0口的P0^0,P0^1,P0^2…..P0^7依次送低电平,其它端口送高电平就可以实现L1亮其它灭→L2亮其它灭→L3亮其它灭→……L8亮其它灭→L1亮其它灭的流水灯的功能了。
5/2单片机系统设计报告
实训内容1.2流水灯程序流程图
P0=(P0<<1)+1P左移一位加1开始
是
P0=1111,111L1亮
延时,让LED亮一段时间
否
P0=0111,1111?
即第8个灯亮?
实训内容1.2流水灯程序代码
#include
voiddelay()
//延时函数
{
unsignedinti,j;
for(i=0;i<200;i++)
for(j=0;j<100;j++);}voidmain(void){
P0=0xfe;while(1)
//P0口赋值为1111,111//while(1)语句,LED灯一直在循环显示
{
delay();
//延时一段时间,让LED灯亮一段时间再亮下一个灯
if(P0==0x7f)
//当P0口为0111,1111,P0口转为1111,1110即当第8个LED灯亮完
P0=0xfe;
//即当第8个LED灯亮完一定的时间后,又从第一个灯开始亮.
else
P0=(P0<<1)+1;
//左移1位后加1,保证低位移位后为1,每个时刻里只有一个灯亮.
}}
实训内容1.2实训心得:
流水灯作为单片机编程的一个小程序,可以了解了单片机的基本使用和程序的编写方法。而且编写流水灯程序有很多和方法。可以用数组的方法,用一个数组储存着8个状态的,用一个循环每次点亮一个灯。也可能用C51库函数的_crol_(k,1);左移函数来实现流水灯。也可以用我们组的位运算,每次移一位来完成流水灯功能。我觉得用我们组的方法更容易理解,代码也更简洁。
6/2单片机系统设计报告
实训内容1.3数码管动态扫描显示
实训要求:使用动态扫描的方式,在实验板的LED数码管上显示本人学号的后四位。
实训内容1.3数码管动态扫描电路原理分析
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
在每个段码端(A,B,C,D,E,F,G,H)串联了一个470欧姆的电阻进行限流,防止电流过大而烧坏LED数码管的段码。四个三极管用于进行扩流。其中电阻R22、R23、R24、R25的作用是当控制电压无效时,保证三极管处于截上止状态,其阻值为4.7K。
下图中,数码管段码用P0口控制。P1^0、P1^1、P1^2、P1^3分别控制数码管的位选。
P1^0、P1^1、P1^2、P1^3送0是选通某位数码管,P0口用共阳LED数码管的段码来选择显示数字的。
实训内容1.3数码管动态扫描显示学号的程序流程图
开始
i=0;否
i==4?是
P1=wei[i];P0=duan[i][i]];
delay();i++;
7/2单片机系统设计报告
实训内容1.3数码管动态扫描显示学号的程序代码
#include
{unsignedchari,j;for(i=0;i<100;i++)for(j=0;j<10;j++);}voidmain(){unsignedchari;unsignedchar
duan[4]={0xa4,0xf9,0xc0,0xf9};
//数码管段选。XXX的学号后四位数字
//unsignedchar
duan[4]={0xa4,0xf9,0xb0,0xa4};//数码管段选。XXX的学号后四位数字
unsignedchar
wei[4]={0xf7,0xfb,0xfd,0xfe};//数码管位选。
while(1)//一直在扫描并显示
{for(i=0;i<4;i++)
//四次循环,每次选通一个数码管,并显示相应数字.{P1=wei[i];//P1口只选通某一个数码管,P0=duan[i];//P0口发送相应段码,显示相应的数字
delay();//延时,让某位数码管显示数字一段时间后,让下一个数码管显示相应数字
}}}
实训内容1.3实训心得:
数码管动态扫描显示四个固定的数字(学号后四位),是以后实训内容如时钟,闹钟等要用到LED数码管的显增时间的基础。
LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。
动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。其接口电路是把所有数码管的8个笔画段A-DP同名端并联在一起,而每个数码管的公共极COM各自独立地接受I/O线控制,单片机向字段输出口送出段码是,所有数码管由于同名端并连接收到相同的字形码,但究竟是哪个数码管亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。而所谓动态扫描是指采用分时的方法,轮流控制各个数码管的COM端,使各个数码管轮流点亮。
再轮流点亮扫描过程中,每位数码管的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各个数码并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。
8/2单片机系统设计报告
实训内容1.44x4矩阵按键
实训要求:对4x4矩阵按键进行编码,并在数码管上显示按下的键。如按下1则显示1。
实训内容1.44x4矩阵按键电路原理分析
矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上,行、列线分别列接到按键开关的两端。行线通过上拉电阻接到+5V上。无键按下时,行线处于低电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平一样为高电平。这是识别矩阵键盘按键是否被按下的关键所在。一个4x4的行列可以构成一个16按键的键盘。
本次以扫描法来识别按键。在扫描法中分两步处理按键,首先是判断有无键按下,让所有的列线置高电平,检查各行线电平是否有变化,如行线有一个为高,则有键按下。当判断有键按下时,使列线依次变低,其余各列为高电平,读行线,进而判断出具体哪个键被按下,然后用数码管动态扫描显示出按键值。
9/2单片机系统设计报告
实训内容1.44x4矩阵按键程序流程图
在数码管上显示编码
P1=0xfe;P0=a[key_num%10];delay();P1=0xfd;P0=a[key_num/10];delay();
有键被按下?
是
扫描,确定被按下的是哪一个键
有键被按下?
是
delay();开始
否
实训内容1.44x4矩阵按键程序代码
#include
voiddelay()
{
}
voidmain(){
10/2//延时函数,unsignedchari,j;for(i=0;i<100;i++)for(j=0;j<20;j++);
单片机系统设计报告
unsignedcharkey_num,a[]={0xc0,0xf9,0xa4,0x4b0,0x99,0x92,0x82,0xf8,0x80,0x90};//数while(1){
P2=0x0f;//P2口送0000,1111,低四位为1,高四位为0,if((P2&0x0f)!=0x0f)//如果if里的条件不成立,则说明可能有按键被按下
{
delay();
//延时消抖,//延时一段时间后,如果if里的条件仍然成立,则码管段码.if((P2&0x0f)!=0x0f)
{
}确定是有键被按下了。
P2=0xef;//P2口送1110,1111.扫描第一行按键。
if(KEY1==0)key_num=1;//如果第一行第一个按键被按下,则if(KEY2==0)key_num=2;
if(KEY3==0)key_num=3;
if(KEY4==0)key_num=4;
P2=0xdf;//P2口送1101,1111.扫描第二行按键。
if(KEY1==0)key_num=5;
if(KEY2==0)key_num=6;
if(KEY3==0)key_num=7;
if(KEY4==0)key_num=8;
P2=0xbf;//P2口送1011,1111.扫描第三行按键。
if(KEY1==0)key_num=9;
if(KEY2==0)key_num=10;
if(KEY3==0)key_num=11;
if(KEY4==0)key_num=12;
P2=0x7f;//P2口送0111,1111.扫描第四行按键。
if(KEY1==0)key_num=13;
if(KEY2==0)key_num=14;
if(KEY3==0)key_num=15;
if(KEY4==0)key_num=16;
key_num赋值为1.
}P1=0xfe;//1111,1110,P1口选通最后一位数码管。
P0=a[key_num%10];//P0口送key_num个位的段码。无论key_num是否大于10都除10取余,小于10时是数的本身,大于等于10时是数的个位
delay();//延时,让选通的数码管亮一段时间。
P0=0xff;//在下次数码管亮时,先关闭段码,让数码管不显示数字。
11/2单片机系统设计报告
if(key_num>9)//如果key_num>9,则除以10.取出数的十位.
{
P1=0xfd;
//1111,1101,P1口选通第二个位数码管。
P0=a[key_num/10];//除以10.取出数的十位.P0口送key_num十位的段码,数码管显示数的十位。
}
}
}
delay();P0=0xff;实训内容1.4实训心得:
通过本次课程设计,懂得了4x4矩阵式键盘接口的工作原理及其的按键识别方法(扫描法);通过自己动手操作,对于消除抖动和计算显示键值有了更深的理解;也对Keil的使用有了进一步的了解,至少最基本的懂一些;了解了LED显示接口的原理等的相关知识。觉得自己本次的课程设计过于简单,实现也不难;
这个实训内容,新的知识有4x4矩阵键盘的扫描原理,显示部分还是上次实训的数码管动态扫描显示原理,只不过上节实训显示的数字是固定不变的,这次显示的数字是按键的值。
实训内容2.1基于单片机或RTC制作一个时钟。
实训要求:4个数码管用动态扫描的方式显示时间,前两位显示小时,后两位显示分钟,4个点用来显示秒,每两秒显示一次。
实训内容2.1RTC时钟电路原理图分析
下图示出DS1302的引脚排列,实验板上的时钟芯片,有锂电池作为单片机系统断电后供电用。在主电源关闭的情况下,也能保持时钟的连续运行.X1和X2是振荡源,外接32.768KHZ晶振.RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送.RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段.当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作.如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态.上电运行时,在Vcc≥2.5V之前,RST必须保持低电平.只有在SCLK为低电平时,才能将RST置为高电平.I/O为串行数据输入输出端(双向),后面有详细说明.SCLK始终是输入端.显示模块用实训1.3里的数码管显示电路来显示。RTC时钟电路里,DS1302负责计时用,单片机负责读取DS1302时钟芯里的时间并用数码管显示出来
12/2单片机系统设计报告
实训内容2.1RTC时钟程序流程图
time_chuli();(时间BCD处理,并缓存时间进数组储存)
开始
set_rtc();设置DS1302时间
read_rtc();(单片机读取DS1302时间)
dis_time();数码管显显示时间
实训内容2.1RTC时钟程序代码
#include
sbitsck=P3^5;//串行时钟
sbitio=P3^6;//数据输出/输入
sbitrst=P3^7;//复位
unsignedchartime_data[7]={12,3,6,6,11,8,0};//时间储存数组.时间初始化;年(2000~2099,12表示2012年),周,月,日,时,分,秒
共七种数据
unsignedcharwriter_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年周月日,时分秒的(写入)的地址;unsignedcharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年周月日,时分秒的(读取)的地址;unsignedchartime_temp[6];unsignedcharsmg_wei[]={0xfe,0xfd,0xfb,0xf7};//数码管位选码,13/2单片机系统设计报告
unsignedcharsmg_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//数码管段选共20个。前10个为不带右下角小点0~9的数字,后10个为0~9带右下角小点的数字,voiddelay();voidwrite_ds1302_byte(unsignedchardat);voidwrite_ds1302(unsignedcharadd,unsignedchardat);
//写多字节
unsignedcharread_ds1302(unsignedcharadd);voidset_rtc(void);//设置日历
voidread_rtc(void);//读取日历
voidtime_chuli(void);//时间BCD处理并缓存时间函数
voiddis_time(void);
//时间显示函数./***************************主函数************************************/voidmain(){
//set_rtc();//第一次下载时,保留这一个语句,设置时初始化里的时间,以后下载时注释掉这一个句,程序不设置时间,只读取时间
while(1){
}
read_rtc();
//读取实时时间.time_chuli();//时间BCD处理,并缓存时间.dis_time();
//数码管显示时间
.}/***************************ds1302写数据函数**********************/voidwrite_ds1302_byte(unsignedchardat){
unsignedchari;
for(i=0;i<8;i++)
//循环8次
写入数据
{
}sck=0;io=dat&0x01;
//每次传输低字节
dat>>=1;
//右移一位
sck=1;
}/***************************ds1302写地址,写数据函数************************/voidwrite_ds1302(unsignedcharadd,unsignedchardat){
rst=0;_nop_();sck=0;
14/2单片机系统设计报告
_nop_();rst=1;//写数据有效
_nop_();write_ds1302_byte(add);
//发送地址
write_ds1302_byte(dat);//发送数据
rst=0;//写数据无效
_nop_();io=1;//释放io;sck=1;//释放sck;}/***************************ds1302数取时间数据函数**********************/unsignedcharread_ds1302(unsignedcharadd){
returnvalue;}/***************************ds1302设置时间数据函数**********************/voidset_rtc(void)//设置
日历
{
unsignedchari,j;for(i=0;i<7;i++)
//BCD处理,
15/2unsignedchari,value=0x00;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for(i=0;i<8;i++)
//循环8次
读取数据
{
if(io)
value=value|0x80;
//每次传输低字节
sck=0;
value>>=1;
//右移一位
sck=1;}rst=0;
_nop_();sck=0;_nop_();sck=1;_nop_();io=1;
//以下为DS1302复位的稳定时间
单片机系统设计报告
}{
}j=time_data[i]/10;//取出十位
time_data[i]=time_data[i]%10;//取出个位
time_data[i]=time_data[i]+j*16;//转换成16进制;write_ds1302(0x8e,0x00);
//去除写保护
for(i=0;i<7;i++)//七次写入,年,周,月,日,时,分,秒
共七种数据
{
write_ds1302(writer_add[i],time_data[i]);
}write_ds1302(0x8e,0x80);
//开启写保护
voidread_rtc(void)
//读取
日历
{
unsignedchari;for(i=0;i<7;i++)//七次读取分别读出,年,周,月,日,时,分,秒
共七种数据
{
time_data[i]=read_ds1302(read_add[i]);
}
}/***************************ds1302时间处理函数**********************/voidtime_chuli(void)
//时间处理函数,把数字转成10进制数,并把时分秒的数分别缓存进time_temp数组.{
time_temp[0]=time_data[6]%16;//数组里的秒的个位,变成10进制数,time_temp[1]=time_data[6]/16;time_temp[2]=time_data[5]%16;//数组里的分的个位,变成10进制数,time_temp[3]=time_data[5]/16;time_temp[4]=time_data[4]%16;//数组里的时的个位,变成10进制数,time_temp[5]=time_data[4]/16;}/***************************数码管显示时间函数**********************/
voiddis_time(void)
//数码管显示时间函数
{
unsignedchari,N=0;if(time_temp[0]%2==0)//time_temp[0],是time_temp[]数组里储存秒的个位的元素.判断
N=10;是否是偶数秒
else
N=0;
16/2单片机系统设计报告
for(i=0;i<4;i++)
//有多少位数码管循环多少
{
P0=smg_duan[time_temp[i+2]+N];//段选,*如果是偶数秒,则用time_temp[]数组里含右下角带小点的数显示。
P1=smg_wei[i];
//位选
*否则用不带右下角小数的数字显示,delay();
带点,单数秒不带点
}
闪烁一次
//延时
*此段代码,使显示时间,偶数秒的的数字
//
*数码管上的点亮一秒,灭一秒,每二秒}
/***************************延时函数.**********************/voiddelay()
//延时函数.{
}
unsignedchari,j;
for(i=0;i<100;i++)for(j=0;j<10;j++);
实训内容2.1RTC时钟设计心得
在一个while(1)里不断的从DS1302里读出时间经过BCD处理后,用数码管显示,不断的读取,不断的的显示,就做成了一个时钟。数码管的段码数组里储存着20个元素,前10是不带右下角小点的0~9的数字,后面10个是带有右下角小点的0~9的数字。用于显示秒的每两秒闪烁一次的功能,是这样实现的:显示时间时,判断时间是否是偶数秒,如果是的话用数组后面10个带点的数字显示时间,如果是时间奇数秒的话,用不带点数字显示。这样显示出来的时间就是单数秒的时间时数码管右下角的点不亮,偶数秒时数码管右下角的小点亮,这样就在显示时间的同时,数码管右下角的四个点就亮一秒,灭一秒,每两秒闪烁一次的效果了。
我们组先用定时器做了一个时钟后再用DS1302制作了个时钟,发现要比定时器简单。用定时器要设置两个定时器中断,一个用于动态扫描显示时间,一个中断用于时间的计算,而且用定时器做的时钟时间走久了,时间会比下正时间慢了。用DS1302做一个时种,只需要处理一件事就行了,就是处理一下读取时间后如何用数码管显示时间和数码管四个小点的闪烁。
DS1302怎么计时的时间?怎么设置时间的?单片机怎么样读取时间的?这几个问题不需要怎么处理,因为我从网上看过很多DS1302时钟芯片写的程序,读时间,设置时间,处理时间的子函数是相同的,不同的部分只是显示的部分,如果用LCD显示或者用四个数码管、8个数码管显示时间,显示时间的函数都是不同。用DS1302做一个时钟,只需要从网上下载一些代码,更改一下时间显示部分的代码就可以了。
实训内容2.2单次闹钟
实训要求:在时钟基础上设置一个单次闹钟,当当前时间和设定的时间相同时,蜂鸣器鸣叫,只有当有人按键里,蜂鸣器才停止鸣叫,闹钟的时间通过按键设置
17/2单片机系统设计报告
实训内容2.2单次闹钟电路原理图分析
单次闹钟时钟的电路用到有:
1、单片机最小系统。
2、蜂鸣器电路,用于闹钟声音提醒
3、数码管显示电路,用于显示实时时间和闹钟。
4、DS1302实时时钟芯电路用于计时。
5、4x4矩阵按键电路用于闹钟时间的设置和蜂鸣器的停止。
实训内容2.2单次闹钟其实就是前几个实训的大集合,用到前面所有电路和所有知识。
实训内容2.2单次闹钟程序流程图
实训内容2.2单次闹钟程序代码
/*****************基于RTC的单次闹钟(闹钟时间可调)*************************/#include
sbitKEY1=P2^0;sbitKEY2=P2^1;
18/25ms中断
read_rtc();(单片机读取DS1302key();扫描键盘
有键被按time_chuli();(时间BCD处理,并缓存时间进数组储存)
sound=0?闹钟是否开是
key_num=是
显示闹钟时间
进入时闹钟设是
Sound=1;dis_time();数码管显显示时间
单片机系统设计报告
sbitKEY3=P2^2;sbitKEY4=P2^3;
sbitP10=P1^0;sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;
sbitsck=P3^5;//DS1302串行时钟口
sbitio=P3^6;
//DS1302数据输出/输入口
sbitrst=P3^7;//DS1302复位口
sbitsound=P1^7;//蜂鸣器控制位
unsignedcharkey_num=0;unsignedchartime_data[7]={12,3,6,6,11,8,0};//时间初始化;年(2000~2099,10表示2010年),周(6表示,星期六),月,日,时,分,秒
共七种数据
unsignedcharwriter_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年周月日,时分秒的写入的地址;unsignedcharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年周月日,时分秒的读取的地址;unsignedcharrtc_temp[6];unsignedcharsmg_wei[]={0xfe,0xfd,0xfb,0xf7};unsignedcharsmg_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};unsignedcharnz_time[]={1,2,0,0,0,0},change=-1,nz_star=-1;//闹钟时间储存数组
unsignedcharnz_time_temp[4],num,num_nz=0;unsignedcharnum_rtc,num_nz;
voiddelay(unsignedintz);voidwrite_ds1302_byte(unsignedchardat);voidwrite_ds1302(unsignedcharadd,unsignedchardat);
unsignedcharread_ds1302(unsignedcharadd);voidset_rtc(void);//设置时间
voidread_rtc(void);voidtime_chuli(void);voiddis_time(void);voidkey(void);voidset_nz_time();voiddis_rtc_time();voiddis_rtc_time();voiddis_nz_time();
/*******************************主函数**********************/
19/2单片机系统设计报告
voidmain(){
//set_rtc();//第一次下载时,保留这一个语句,设置时初始化里的时间,第二次或以后下载时注释掉这一个句,程序不设置时间,只读取时间
TMOD=0x01;
//设置定时器0为工作方式并且同时设置定时器1为工作模式1,计时用。
TH0=0xee;
//对定时器0进行初始化,赋初值,TL0=0x00;ET0=1;
//T0中断
TR0=1;
//启动定时0EA=1;
//开启总中断
while(1)
//不断循环,通过键盘扫描进行各功能设置
{
key();
//调用键盘程序
if(sound==0)
//当蜂鸣器响时,(有源蜂鸣器)
if(key_num!=0)//如果有任意键被按下
{
sound=1;
//则停止蜂鸣器响.key_num=0;
}
if(key_num==13)//如果按下了第13号键,{
change=(-1)*change;//change在1和-1之间变动.
设置。
key_num=0;
while(change==1)
//当change等于1时,显示闹钟时间,并可以进行相应{
delay(4000);
set_nz_time();//进入闹钟设置函数。
}}
delay(4000);}
}/*****************定时器0中断(5ms)。用来动态扫描显示时间***************/voidtime0(void)interrupt1{
TH0=0xee;
//重新赋值
TL0=0x00;read_rtc();
20/2单片机系统设计报告
time_chuli();
dis_time();
if(nz_star==1)//当nz_star==1时才进行当前时间与闹钟时间对比,如果闹钟时间到了,启动蜂鸣器。
if((rtc_temp[5]==nz_time[0])&&(rtc_temp[4]==nz_time[1])&&(rtc_temp[3]==nz_time[2])&&(rtc_temp[2]==nz_time[3])&&(rtc_temp[1]==nz_time[4])&&(rtc_temp[0]==nz_time[5]))
sound=0;//关闭蜂鸣器.
}/************************闹钟时间设计置函数***********************/voidset_nz_time(){
key();
//调用键盘扫描子函数
if(key_num==13)
//当按下的是第13号键时
{
change=(-1)*change;
//change在1和-1之间变动.
key_num=0;
}
if(key_num==14)
//当按下的是第14号键时
{
}nz_star=(-1)*nz_star;//nz_star在1和-1之间变动.等于1时才对比闹钟时间是否key_num=0;
到了
if(key_num>=1&&key_num<=10||key_num==15)
{
if(key_num==15)
//当按下的是第15号键时
{
num_nz++;
//每按一下num_nz加一,作用是在闹钟时间不同位的数字
上切换。
if(num_nz==4)
num_nz=0;
key_num=20;}if(key_num==10)
//第10号键是设置闹钟时间时变成0赋值给相应的数
key_num=0;switch(num_nz)
{
//分别调用缓冲区的值进行扫描
case0:if(key_num!=20){nz_time[0]=key_num;key_num=0;}break;//如果按下的是15号键,只切换,不设置时间
case1:if(key_num!=20){nz_time[1]=key_num;key_num=0;}break;//按下
21/2单片机系统设计报告
的是1~10号时,设置时分的相应时间
}
}case2:if(key_num!=20){nz_time[2]=key_num;key_num=0;}break;case3:if(key_num!=20){nz_time[3]=key_num;key_num=0;}break;default:break;
key_num=0;}/*****************************ds1302写数据函数****************************/voidwrite_ds1302_byte(unsignedchardat){
unsignedchari;for(i=0;i<8;i++){
}//循环8次
写入数据
sck=0;io=dat&0x01;
//每次传输低字节
dat>>=1;sck=1;
//右移一位
}/***************************ds1302写地址,写数据函数************************/voidwrite_ds1302(unsignedcharadd,unsignedchardat){
rst=0;
_nop_();
}/**************************************************************************/unsignedcharread_ds1302(unsignedcharadd){
unsignedchari,value=0x00;rst=0;_nop_();sck=0;_nop_();
22/2sck=0;_nop_();rst=1;//写数据有效
_nop_();write_ds1302_byte(add);
//发送地址
write_ds1302_byte(dat);
//发送数据
rst=0;//写数据无效
_nop_();io=1;//释放io;sck=1;//释放sck;
单片机系统设计报告
rst=1;_nop_();write_ds1302_byte(add);for(i=0;i<8;i++)
//循环8次
读取数据
{
if(io)
value=value|0x80;
//每次传输低字节
sck=0;
value>>=1;sck=1;
//以下为DS1302复位的稳定时间
//右移一位
}rst=0;_nop_();sck=0;_nop_();sck=1;_nop_();io=1;returnvalue;}/*************************设置
日历*********************************/voidset_rtc(void){
unsignedchari,j;
for(i=0;i<7;i++)//年,周,月,日,时,分,秒
共七种数据
{
}write_ds1302(0x8e,0x00);for(i=0;i<7;i++){
write_ds1302(writer_add[i],time_data[i]);
//开启写保护
}write_ds1302(0x8e,0x80);
//去除写保护
j=time_data[i]/10;//十位
time_data[i]=time_data[i]%10;//个位
time_data[i]=time_data[i]+j*16;//转换成16进制;}/***************************读取实时时间*****************************/voidread_rtc(void){
unsignedchari;
23/2单片机系统设计报告
for(i=0;i<7;i++)//读取年,周,月,日,时,分,秒
共七种数据
{
time_data[i]=read_ds1302(read_add[i]);
}
}/*****************************数字处理函数*********************************/voidtime_chuli(void)
{
rtc_temp[0]=time_data[6]%16;//数组里的秒的个位,变成16进制,rtc_temp[1]=time_data[6]/16;rtc_temp[2]=time_data[5]%16;//数组里的分的个位,变成16进制,rtc_temp[3]=time_data[5]/16;rtc_temp[4]=time_data[4]%16;//数组里的时的个位,变成16进制,rtc_temp[5]=time_data[4]/16;}/************************数码管实时时间显示函数**************************/voiddis_rtc_time(){
unsignedcharN;
if(rtc_temp[0]%2==0)
//time_temp[0],是time_temp[]数组里储存秒的个位的元素.判断是否是偶数秒
N=10;
//如果是偶数秒,则用time_temp[]数组里含右下角带小点的数显示。
else
N=0;
//否则用不带右下角小数的数字显示,//有多少位数码管循环多少
num_rtc++;
if(num_rtc==4)
num_rtc=0;switch(num_rtc)
{
//分别调用缓冲区的值进行扫描
case0:P13=1;P12=1;P11=1;P10=0;P0=smg_duan[rtc_temp[num+2]+N];break;//0x*e
}case1:P13=1;P12=1;P11=0;P10=1;P0=smg_duan[rtc_temp[num+2]+N];break;//0x*dcase2:P13=1;P12=0;P11=1;P10=1;P0=smg_duan[rtc_temp[num+2]+N];break;//0x*bcase3:P13=0;P12=1;P11=1;P10=1;P0=smg_duan[rtc_temp[num+2]+N];break;//0x*7default:break;}/*****************************闹钟显示函数*******************************/voiddis_nz_time(){
unsignedcharn;
24/2单片机系统设计报告
if(nz_star==1)
n=10;else
n=0;
num_nz++;
if(num_nz==4)
num_nz=0;switch(num_nz)
{
/*分别调用缓冲区的值进行扫描,因蜂鸣器是P1^7口控制的,为避免对蜂鸣器,造成影响,所以不对P1口整体赋值,//只单独对P1的低四位赋值*/case0:P13=1;P12=1;P11=1;P10=0;P0=smg_duan[nz_time[3]+n];break;
case1:P13=1;P12=1;P11=0;P10=1;P0=smg_duan[nz_time[2]+n];break;
case2:P13=1;P12=0;P11=1;P10=1;P0=smg_duan[nz_time[1]+n];break;
case3:P13=0;P12=1;P11=1;P10=1;P0=smg_duan[nz_time[0]+n];break;
default:break;
}
}
/*************************实时时间显示函数*****************************/
voiddis_time(void){
if(change==-1)
dis_rtc_time();//数码管显示实时时间
else
dis_nz_time();//数码管显示闹钟时间
}
/************************延时函数*********************************/voiddelay(unsignedintz){
while(z--);}/***********************键盘函数**************************/voidkey(){
P2=0x0f;if((P2&0x0f)!=0x0f){
delay(2000);if((P2&0x0f)!=0x0f){
P2=0xef;if(KEY1==0)key_num=1;if(KEY2==0)key_num=2;
if(KEY3==0)key_num=3;
25/2单片机系统设计报告
}
}if(KEY4==0)key_num=4;
P2=0xdf;if(KEY1==0)key_num=5;if(KEY2==0)key_num=6;
if(KEY3==0)key_num=7;
if(KEY4==0)key_num=8;
P2=0xbf;if(KEY1==0)key_num=9;if(KEY2==0)key_num=10;
if(KEY3==0)key_num=11;
if(KEY4==0)key_num=12;
P2=0x7f;if(KEY1==0)key_num=13;if(KEY2==0)key_num=14;
if(KEY3==0)key_num=15;
if(KEY4==0)key_num=16;
}
实训内容2.2单次闹钟实训心得
实训内容2.2单次闹钟实训结合了以前所有的程序模块。程序具体的功能是:正常时,显示实时时间。当在显示实时时间的时候,按其它键程序功能不变只有按下第13号键时,数码管显示闹钟时间,进入闹钟设置模式,当再次按下第13号键时退出闹钟设置模式。进入闹钟设置模式后,按下第14号键时,数码管上的四个小点亮,表明程序开始对比闹钟时间到了没有,再次按下14号键,数码管上的四个小点熄灭,四个小点熄灭时,程序不对比判断闹钟时间到了没有。按下1~10号键时,是设置改变闹钟时间的,10号键输入的是0。
按下第15号键时进入下一位数码管的设置。
实训内容4.1光强检测仪
实训要求:焊接调试光照电路,并使用AD转换器对光照度的输出进行采集,然后用LED显示。
实训内容4.1电路原理分析
所用到的元器件有光敏电阻,AD转换等。本设计是测光强电路,可以使用光敏电阻之类的器件利用其感光效应,在将随被测光亮变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测光强显示出来。
26/2单片机系统设计报告
实训内容4.1程序流程图。
#include
sbitCLK=P2^2;unsignedcharcode
smg_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsignedcharsmg_wei[4]={0xfe,0xfd,0xfb,0xf7};unsignedcharsmg_w_temp[4];/*******************函数功能:延时Xms********************************/voiddelayms(unsignedintxms){
unsignedinti,j;
for(i=xms;i>0;i--)
}
for(j=110;j>0;j--);TLC0832();读取光强
处理读取出来的数据
display();数码显示光照强度
开始
/***************************************************/unsignedchar
TLC0832(){
unsignedchari,dat;
CS=1;
//一个转换周期开始
CLK=0;
//为第一个脉冲作准备
CS=0;
//CS置0,片选有效
27/2单片机系统设计报告
DI=1;
//DIO置1,规定的起始信号
CLK=1;
//第一个脉冲
CLK=0;
//第一个脉冲的下降沿,此前DIO必须是高电平
DI=1;
//DIO置1,通道选择信号
CLK=1;
//第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CHCLK=0;
//第二个脉冲下降沿
DI=1;
//DI置0,选择通道CLK=1;
//第三个脉冲
CLK=0;
//第三个脉冲下降沿
DI=1;
//第三个脉冲下沉之后,输入端DIO失去作用,应置1CLK=1;
//第四个脉冲
for(i=0;i<8;i++)
//高位在前
{
CLK=1;
//第四个脉冲
CLK=0;
dat<<=1;
//将下面储存的低位数据向右移
dat|=(unsignedchar)DO;
//将输出数据DIO通过或运算储存在dat最低位
}
CS=1;
//片选无效
returndat;
//将读出的数据返回
}//******************************************************//
voiddisplay(void)
{
unsignedcharn;
for(n=0;n<4;n++)
{
P1=smg_wei[n];
P0=smg_duan[smg_w_temp[n]];
delayms(5);
}
}/********************主函数*******************************/
voidmain(void){
unsignedintu;
//储存A/D转换后的值
unsignedchari;
while(1)
{
u=TLC0832();
//进行A/D转换
for(i=0;i<4;i++)
28/2单片机系统设计报告
}
{
smg_w_temp[i]=u%10;
u=u/10;
}
display();
}
实训内容4.1光强检测仪实训心得
在程序设计方面,AD转换,就像DS1302读取收集数据的函数都是固定的,数据转换部分也是固定的。只需要改一下显示部分,就要以使程序在不同的显示电路上显示出来结果
这次设计与制作,主要是对光强这个陌生名词的理解和完成设计的硬件电路的设计。首先,我们了解光强的基本概念,了解光强在生活中的应用。因为我们没用光电传感器,所以我们需用光敏电阻或光敏二极管做成一个光电转换电路用来采集光强。我们需了解各个器件的引脚分布,防止接错。焊接过程中,我们由于没有掌握器件的引脚,而导致电路不能正常工作。
实训内容总结与心得
结束了两周的单片机系统设计实训,真是让我们受益匪浅,学到了很多东西,不管怎么样,为期一周的单片机课程设计让我们受益匪浅.此次课程设计软件与硬件相结合,考察了我们的焊接水平与编程能力.对于我们应用电子技术的学生而言焊接是不成问题,也很顺利;可到了编程时就出现了很大的障碍,先开始的显示时钟还算顺利,下面的报警部分就花费了相当长的时间,本来还以为编程会很简单的,等到实际操作起来才知道它的复杂性,没有想像中的那么得心应手,理解流程是有思维的前提.单片机是我们上学期开设的课程,所以很多专业知识也都忘记了.不过经过我们一步步的努力,花费的时间与精力终于没有白费,效果渐渐地出现了.其实本身程序的思维是正确的,只是步骤中有点小错误,所以导致整个程序的结果很乱,在仔细修改程序之后,终于一步步地达到效果了.
我们将各个部分的程序编好后怎么都连不起来,出不了预期的效果.数码显示管上什么都没有,按一下旁边与之相连的元器件时就有显示了信号的时候红灯就亮了,这个现象让我们喜出望外.经过修改时钟程序和报警系统都被使用上了,可更大的难题就是如何让它报警?这困扰了我们,数码显示管上终于有了闪烁的效果,可报警声还没加的上去.这再次困扰了我们,可都是简单的,从没涉及到这么复杂的程序过,最后在全组人竭尽全力,程序基本编写成功,这是我们共同努力的结果,在享受我们成果之时,不得不感慨单片机的重要性与高难度性,所以为期两周的单片机课程设计没有浪费,我们从中学到了很多知识.,也让我们对单片机有了更深一步的了解.虽然最后结果是出来了,
29/29
篇二:i/o口(独立键盘和数码管实验心得
单片机实验四
IO显示控制实验(数码管显示实验)
电子信息工程学系实验报告
课程名称:单片微型计算机与接口技术
成
绩:
实验项目名称:
实验四I/O显示控制实验
实验时间:2013.11.24指导教师(签名):
班级:****姓名:****学号:********
一、实
验
目
的:1、熟悉keil仿真软件、proteus仿真软件、软件仿真板的使用。
2、了解并熟悉一位数码管与多位LED数码管的电路结构、与单片机的连接方法及其应用原理。
3、学习proteus构建LED数码管显示电路的方法,掌握C51中单片机控制LED数码管动态显示的原理与编程方法。
二、实
验
环
境:1、WindowsXP系统;
2、KeiluVision2、proteus系列仿真调试软件
三
、实
验
原
理:
1、LED数码管的结构和原理
LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。
(a)共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮;
(b)共阳极LED显示器的发光二极管阳极并接。
2、七段显示器与单片机接口:只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如下表所示。通常将控制发光二极管的8位字节数据称为段选码。
八段选码(显示码)的推导(以共阳数码管显示C为例):
要显示C则a、f、e、d四个灯亮2.为是共阳数码管,则a、f、e、d应送0时亮3.dp-a为11000110B3、多位数码管的显示:电路结构、动态静态两种实现原理:LED显示器有静态显示与动态显示两种方式。(1)LED静态显示方式
/3各位LED的位选线连在一起接地或接+5V;每位LED的段选线(a-dp)各与一个八位并行口相连;
在同一时间里每一位显示的字符可以各不相同。
(2)LED动态显示方式
将所有LED的段选线并联在一起,由一个八位I/O口控制,而位选线分别由相应的I/O口线控制。
如:8位LED动态显示电路只需要两个八位I/O口。其中一个控制段选码,另一个控制位选。
四
、实
验
内
容
过
程
及
结
果
分
析:
用protues进行流水灯的仿真需要的元件有AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、7SEG-MPXI1CC画出仿真图
1、在左边第3位显示5程序如下:#include\voiddelay(intz){inti,j;for(i=110;i>0;i--)for(j=z;j>0;j--);}main(){unsignedchari;while(1){P2=0xdf;P0=0x6d;delay(400);}}
图4.1左边第3位显示52、在左边第2位循环显示1-8程序下所示:#include\{unsignedcharcodetab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,};for(i=0;i0;i--)P2=0xfd;{inti,j;P0=tab[i];for(j=z;j>0;j--);delay(500);}main()}{P2=0x00;unsignedchari;}while(1)}
图4.2左边第2位循环显示1-83、在数码管上\同时“显示1-8程序如下
/3#include\Unsignedcharcodetab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,};unsignedcharcodechr[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};main(){unsignedchari;while(1){for(i=0;i#defineuintunsignedint#defineucharunsignedcharsbitP13=P1;sbitP16=P1;ucharcodetab1[]={0x06,0x5b,0x4f,0x66,0x6d};ucharcodetab2[]={0x76,0x79,0x38,0x38,0x3f};ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voiddelay(uinta){uinti,j;for(i=a;i>0;i--)for(j=19;j>0;j--);}voidmain(){ucharnum;while(1){}}for(num=0;num#defineuintunsignedint#defineucharunsignedcharsbitP16=P1;ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voiddelay(uinta){uinti,j;for(i=a;i>0;i--)for(j=6524;j>0;j--);}voidmain(){ucharnum1,num2;while(1){if(P16==0){for(num1=0;num1/3
篇三:i/o口(独立键盘和数码管实验心得
篇四:i/o口(独立键盘和数码管实验心得
单片机学习心得体会
篇一:
单片机学习心得
时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机课程也结束,但通过这次单片机的学习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
当今社会随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么可编程控制器的出现则是给现代工业控制测控领域带来了一次新的革命。在现代社会中,温度控制不仅应用在工厂生产方面,其作用也体现到了各个方面。本学期我们就学习了单片机这门课程,感觉是有点难呢。也不知道整个学习过程是怎么过来得,可是时间不等人。
刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机
或单片机。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。它的应用范围很广,在工业自动化中应用有数据采集、测控技术。在智能仪器仪表中应用有数字示波器、数字信号源、自动取款机等。在消费类电子产品中应用有空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。在通讯方面应用有手机、小灵通等。在武器装备方面应用有飞机、坦克、导弹、航天飞机、智能武器等。刚开始学习时只能抄写别人做成功的程序,一遍一遍的写,从简单的入手,逐步的积累,一步步的能够将小的程序结合到一起,拼接成较为复杂一些的程序。但是程序不要只是看别人得,一定要自己写过才是自己的。只有当你自己能写出来的时候说明你真懂了。刚接触KEIL时确实很让人头疼,使用KEIL不会建项目、不会使用实验板。然后可以参考已经成功的程序,抄过来,写一个最简单的,让它运行起来,先培养一下自己的感
觉,先建个项目,再配置一下项目,然后建个程序,加入项目中,再写代码、编译、生成HEX,刷进单片机中、运行。其实当遇到问题一定要自己尝试着解决,不能遇到问题就去问别人,自己一定要掌握解决问的方法和思路。对一个
新项目时,自己一定要多想想,不要急着去看别人是怎么写的。应该先想一下程序的构架,想想如何来完成。然后自己动手去写,理清自己的思路这样更容易提高自己。
熟悉单片机的人都知道,要学好单片机可不是一件容易的事,倒不是因为单片机很难学,而是很难找到一本专为单片机入门者而编写的教材。翻一下身边的单片机教材,都好像是为已经懂单片机的人而写的,一般先介绍单片机的硬件结构和指令系统,再是系统扩展和外围器件,顺便讲一些应用设计(随便说一下,很多书中的电路设计已经过时,并且有些程序还是错误的)。如果按照此种学习方法,想进行产品开发,就必须先把所有的知识全部掌握了才可以进行实际应用。学习使用单片机只能靠循序渐进的积累,虽然单片机的课程只上了几节就去上班了,但在学习的过程中有了一定的了解。下面就本人学习单片机的过程和经验做简要介绍。
首先,学习单片机要有一定的基础:电子技术方面要有数字电路和模拟电路等方面的理论基础,特别是数字电路;编程语言要求汇编语言或C语言。要想成为单片机高手,建议初学者首先学习汇编语言,学的差不多的时候,转入C语言学习。尽管汇编语言属于低级语言,编程效率低,但是较C语言具有目标代码简短,占用内存少,执行速度快等优点,更重要的是能使初学者尽快熟悉单片机的内部结构,并能对其进行精确的控制。汇编语言在单片机教材里面都会涉及,不需要单独购买教材和学习。C语言是一门学问,有很多专业书籍来讲解,并且对我们今后的编程生涯有绝对的好处,因此要深入学习,千万不要自以为看了某某的视频教程就以为掌握了C语言,那只是C语言的一部分。在这里给大家推荐一本单片机C语言程序设计参考书,马忠梅等著,北京航空航天大学出版社出版的《单片机的C语言应用程序设计》,要求C语言基础。如果没学过C语言,建议学习清华大学谭浩强编写的C语言程序设计,这本书写的不错,通俗易懂。
其次,是单片机教材选择。单片机是一门非常重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有一定地了解和感官认识,它的是怎样工作的,能干些什么?刚开始时,也许你看不明白。
但这并不要紧,因为你还缺乏实践经验。现在单片机应用广泛,因此各个厂家分别推出了自己的单片机,我们没必要每样都学!因为他们的编程方法和调试过程以及内部指令结构有一定的相似,只要学精通一款就OK了!尤其是用C语言编程,就几乎不用分什么派系,但是我们要选择一款有代表性的知识范围广,并且入门容易,书籍多。一般来说,MCS-51系列单片机已经得到广泛的普及和应用,市场上它的资料也比较多,用的人也很多。给大家推荐一些参考书,学习时只需要一本就足够拉。书名:《新编MCS-51单片机应
用设计》,哈尔滨工业大学出版,张毅刚;书名:《单片机原理及应用》,高等教育出版社,张毅刚等;书名:《单片机高级教程:应用与设计》,北京航空航天大学出版社,何立民。相关教材还有很多,在这不一一列举。
然后,是开发工具和开发环境的选择。选择一块合适的学习板,对于初学者来说一般无力接受,如果经济条件允许、本人又对单片机很感兴趣、有从事相关工作意向的话,鼓励大家购买。随便说一句,学习板功能要求太全,具有流水灯、数码管、独立键盘、矩阵键盘、AD或DA、液晶、蜂鸣器等就差不多啦,毕竟,功能齐全的价格比较高。仿真器对单片机初学者来说既是那么耳熟,同时又有些陌生,这主要是因为市场上传统的仿真器价格都在千元以上,对经济不是非常宽裕的人来说是不小的开支。同时仿真器是用来提高调试程序效率的,也不是非需不可的,如果你没有仿真器,遇到程序出错的时候,只好苦思冥想,反复烧写调试。随便推荐一下,学林电子的51tracer仿真器,有兴趣的朋友可关注一下。有了单片机教程板以后,先看下指导说明书,熟悉一下学习板,开卷有益。以后就得靠自己多练习了,将学习板与电脑连接好,先学会开发软件的使用,然后从最简单的流水灯实验做起,按照你自己的意愿控制流水灯,当你完成时,你会发现这是多么惬意的事情。太好玩了,你会觉得这不是在学习,而是在玩,当你发现,单片机能够按照你编写的程
序工作时,你会觉得非常兴奋,比做什么事情都开心,这样你会慢慢迷上单片机,真的。不少站上说搞定某个实验,就恭维的告诉你一声”恭喜你,学会了”自己学会了单片机,这有点可笑,这只能说明你算过关了,对单片机有了一定了解和会使用它了。但是单片机能完成的功能太多了,尤其是对外围器件的控制,综合起来能设计出许多意想不到的产品.因此除了入门外,精通可千万别轻易说出口。
最后,在熟练掌握和应用后,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计开发各种课题,不断的积累经验。最终,自己完全设计具有个人风格的课题,产品,这样你就是单片机高手拉。只要过了第一关,后面的路就好走多了,万事开头难,这大家可能都听过。
有时候单片机的学习很单调,有些知识学起来很抽象,不容易理解,只能慢慢适应,一边学习理论知识,一边编写程序,将程序刷入单片机进行调试,通过这种方式才能更快速的学习单片机。要坚定自己的学习信心,在付出持之以恒的努力,我相信自己能进一步加深对单片机的了解,在单片机的学习道路上走得更远!
篇二:单片机实验心得
通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
作为一名自动化专业的快大三学生,我觉得做单片机实习是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去,我想做类似实习就为我们提供了良好的实践平台
学习单片机没有捷径,不能指望两三天就学会,要坚持不懈,重在积累
单片机是一门应用性和实践性很强的学科,要多动手,多做实验。
(4)
要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。
(5)
碰到问题可以借助络来搜寻答案和对自己有帮助的问题,一定会有所收获。
(6)
小组要团结,小组之间要多交流。技术是靠不断的积累和交流才会进步的,封闭自守只会更加落后
的兴趣。发现问题、提出问题、分析问题、解决问题和实践
能力的提高都会受益于我在以后的学习、工作和生活中
。1、不管做什么事,计划是很重要的。没有一个完好的计划,做事情就会没有一个好的顺序,做事情会比较乱,很难成功。而有一个好的计划,不管做什么事都会事半功倍,做事心中有数,明确重点和缓急,不会有疏漏。这样才能提高成功率。
2、做事要多动脑,选出最好的方法。一件事往往有多种解决方法,一个好的方法,不仅能使事情事半功倍,而且往往决定最后的成与败,所以做事时一定要多动一下脑筋,想出最好的方法。
3、要注意细节。细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。因此我们不仅仅要有整体意识,也要注意细节,不要因一个关键地方的一个细节而导致满盘皆输。
4、最后,也是最重要的一点,通过这次课题,我们学到了很多有关单片机方面的知识,也对单片机有了更深入的了解。使我们受益匪浅。
总之,亲自动手是课堂学习的延续,电子领域随时随地都在发生着翻天覆地的变化,现有的知识储备总是落后于科技的发展脚步,我们只有不断学习新知识,才能做到面对新课题时游刃有余
篇三:论文
单片机论文
专业:
姓名:聂瑶09通信工程20XX0210420XX4学号:
单片机学习体会
随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时/数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机。单片机是微型计算机应用技术的一个重要分支,近年来在工业智能仪器仪表、光机电设备、自动检测、信息处理、家电等的得到广泛应用和迅速发展。
20XX年全国高校毕业生人数超过600万,可见需要就业的毕业生数目的庞大。另一方面,很多企业削减甚至取消了校园招聘计划,这“两重压力”带来了就业形势异常严峻的后果。据调查发现,企业需求与人才供给完全不对称,学生就业难而且企业招人也难的现象。在就业形势如此严峻的情况下,职业规划对一个大学生来说就显得很重要了。而看清市场需求则是职业规划的前提。目前,对于电子行业,嵌入式系统的发展势如破竹,据统计目前仅单片机设计行业至少有20-30万的人才缺口,仅北京市场嵌入式硬件开发工程师的需求就已经超过了5万人,而且还在持续增加。面对如此
大的市场需求,相信大家有必要了解一下单片机。
单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书。单片机并不象传统的数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”的原因使得许多初学者怎么也弄不懂单片机的工作过程,怎么也不明白为什么将几个数送来送去就能让数码管显示一串字符或控制一个电机的变速。对初学单片机的人来说,需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。简单的说,使用单片机实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器。再简单些,就是控制单片机哪些引脚的电平什么时候输出高电平,什么时候输出低电平。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。
例如:在单片机应用系统中,经常需要通过RS-232串行口与微机进行通信。目前在各种操作系统中,Microsoft的Windows较为常见,而且大多为
Windows95/98等32位平台。以往在Windows平台上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。Microsoft推出的ActiveX技术提供了另外一种实现串行通信的方法。这种方法不仅相对较为简单,而且非常实用。尤其是VisualC++这种可视化面向对象的编程环境中,可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。
学习单片机的最有效方法是理论与实践并重。学习与实践结合,边学习、边演练,循序渐进,这样举一反三,就能将用到的指令理解、吃透、扎根于脑海,甚至“根深蒂固”。也就是说,当你此次学习完某几条指令后(一次数量不求多,只求懂),接下去就该做实验了,通过实验,使你感受刚才的指令产生的控制效果,眼睛看得见(灯光)、耳朵听得到(声音),通过这些感性认识就能深刻理解指令是怎样转化成信号去控制电子元器件的。
单片机的特点
:具有优异的性能价格比;集成度高、体积小、可靠性高;控制功能强;低电压、低功耗
单片机的应用
:
1、在智能仪器仪表中的应用:在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。
2、在机电一体化中的应用:机电一体化产品是指集机械、微电子技术、计算机技术于一本,具有智能化特征的电子产品。
3、在实时过程控制中的应用:用单片机实时进行数据处理和控制,使系统保持最佳工作状态,提高系统的工作效率和产品的质量。
4、在人类生活中的应用:目前国外各种家用电器已普通采用单片机代替传统的控制电路。
5、在其它方面的应用:单片机除以上各方面的应用,它还广泛应用于办公自动化领域、商业营销领域、汽车及通信、计算机外部设备、模糊控制等各领域中。
单片机的基本组成
:它由CPU、存储器(包括RAM和
ROM)、I/O接口、定时/计数器、中断控制功能等均集成在一块芯片上,片内各功能通过内部总线相互连接起来。
输入/输出引脚P0、P1、P2、P3的功能
:~P0。
7:P0口是一个8位漏极开路型双向I/O端口。在访问片外存储器时,它分时作低8位地址和8位双向数据总线用。在EPROM编程时,由P0输入指令字节,而在验证程序时,则输出指令字节。验证程序时,要求外接上拉电阻。P0能以吸收电流的方式驱动8个LSTTL负载。
P1.0~P1.7(1~8脚):P1是一上带内部上拉电阻的8位双向I/O口。在EPROM编程和验证程序时,由
它输入低8位地址。P1能驱动4个LSTTL负载。
为了高效的掌握单片机技术,拥有一款价廉物美的单片机开发套件则是非常重要的,这样我们就可以将自己设计的程序真正的在单片机里运行起来。以前的单片机硬件开发平台上千元的价格并不是一般的初学者所能够承受的。针对这样的现状,为了帮助更多想学单片机又没有经济能力的同学,我在电子创新实验室开发了一套超高性价比的单片机开发套件。该套件以它自身的结构特点,可用于8位单片机基础学习、各种电子方面的课程设计、相关单片机的毕业设计、电子方面的各种竞赛以及微控制器方面的项目研发等。它成为我追求嵌入式系统高手梦想的基石!
开发板摆在你的面前,亲自操作它,才会有深刻的体会,才能学明白它。从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西,当你编写的程序按你的意愿实现时,你能体会到学习单片机带来的无穷乐趣!
等初步学会了单片机软件设计后,可将通常由硬件完成的工作交由软件实现,这样,系统的体积、功耗、成本将大大降低,而功能得到提升与增强,使习惯于传统电路设计的人对单片机产生一种妙不可言的相见恨晚之感,真正感受、体会到现代单片微型计算机的强大作用,从而投身于单片机开发的行业中。从此。
你的人生因为有了单片机而精彩!
还等什么呢,行动起来吧,找一套独特的造型、超高的性价比、详尽资料配备单片机开发板开启8位单片机教程的新高潮。在短期内,你将领略从8位单片机硬件设计到软件开发的整个过程,惊喜、激动、欢呼都将是你的切身体会,只要你肯努力、下功夫、多实践,一定会成功的!
篇四:
单片机的学习心得感受
随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时/数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机。单片机是微型计算机应用技术的一个重要分支,近年来在工业智能仪器仪表、光机电设备、自动检测、信息处理、家电等的得到广泛应用和迅速发展。单片机是自动地进行运算和控制,把实现计算和控制的步骤一步步地用命令的形式,即一条条指令预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行,得到你要的东西。
这学期在老师的带领下,我从对单片机一无所知的到现在终于有点了解,这期间虽然没有在这方面下很大的功夫,但是也学到了一点知识,从点亮一个灯,到流水灯再到数码
管的显示以及后面独立按键。这都是我以前无法想象的。
单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书。单片机并传统的数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”的原因使得许多初学者怎么也弄不懂单片机的工作过程,怎么也不明白为什么将几个数送来送去就能让数码管显示一串字符或控制一个电机的变速。对初学单片机的人来说,需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,现在市场上大多数讲单片机的书一开始就讲解复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。简单的说,使用单片机实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器。再简单些,就是控制单片机哪些引脚的电平什么时候输出高电平,什么时候输出低电平。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。
学习单片机首先用到c语言,提到C语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个文件里面。编译器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现
的所有功能的源代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需
过多关注。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。
谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。
假设我们有一个文件,其提供最基本的LCD的驱动函数
。在当前位置输出一个字符
而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了
这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体,好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。
硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课是对我的学习态度的一次检验。对于这次单片机综合课程,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次课程所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
感谢老师的让我有了一个
更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。虽然课程时间很短,但我学习了很多的东西,可以使我接触接触,感受颇深。
篇五:单片机实验心得体会
单片机实验心得体会
时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。
在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。
这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。将所学知识运用到实践中,在实践中发现问题,强化理论知识。
现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。
第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。第一次实验体现了一个人对新事物的接受能力和敏感度。虽然之前做过许多种实验。但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。所以
第一次试验相对失败。鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。
在做实验中,第二个问题应该是准备不充分吧。一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。后来在老师的批评下,认识到这是个很大
的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。
三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。但是编程是一件很严肃的事情,容不得半点错误。于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。这也能激发了学习的兴趣。
还有一次实验是调出电脑里的程序,让它在试验箱上实现其功,让我们去体会别人编程的技巧和程序逻辑美感。看了之后,不得不说我目前的水平简直太小儿科了。还有连线也是个问题,对试验箱内部结构功能的不懂,以至于不知道
如何连线让程序实现其功能。这让我意识到单片机是软件和硬件的结合,两者是一个整体。所以必须把硬件方面加强。
五是基础知识的薄弱,也是最基础的问题吧!在用C语言编程时,才发现自己C语言真的太差劲了,虽然这门课程早就学过,但是就目前所掌握的C语言知识,对于单片机编程远远不够。C语言也是我们以后学各种语言的基础,必须要花大量的时间温习强化。
通过这个学期的单片机实验,我发现了自己很多问题,也从中学
到了很多。它不是物理实验时,只需要记住老师说的步骤,顺次做完就可以了;并不是matlab实验,只需要你知道一些语句表达,然后在不违背语法的情况下,组合好就可以了;它不是EDA实验,把一节课混下去就行了,反正大家都不知道,都是混,都跟不上老师的节奏思路。他需要我们在掌握硬件的基础上,用单片机语言在keil软件上写出一定的程序,然后利用stcisp烧到试验箱上,实现其特定的功能。而在编程时需要逻辑力,创新力,知识组合力,知识搜索。单片机在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,融会贯通和有机结合,才能设计出优良的应用系统。并且需要与时俱进,不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。培养自己接
受新知识的自学能力,掌握芯片发展动态。培养自己的创新精神,在原有的基础上进行改进,使之功能不断完善。当然,最重要到还是态度,无论做什么事情,足够认真,足够坚强,足够毅力,足够决心,足够勇气,就一定能办到。
篇六:单片机个人学习心得和体会
滨江学院
20XX~20XX学年第二学期
《单片机原理及应用》
实验心得
学生姓名学
号院
系专
业通信工程
二O一三
年
六
月
十
日
单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在里面的应用很多。学习单片机最好先从汇编语言入手,虽然汇编语言是低级语言,编程效率低,但它比C语言占用内存小,执行速度快等优点,在刚接触单片机时更容易学习。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。
刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称
为单片机。它的应用范围很广,在工业自动化中应用有数据采集、测控技术。在智能仪器仪表中应用有数字示波器、数字信号源、数字万用表、感应电流表,自动取款机等。在消费类电子产品中应用有洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。在通讯方面应用有调制解调器、程控交换技术、手机、小灵通等。在武器装备方面应用有飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。刚开始学习是总觉得指令语句太过复杂,怎么也记不住,这时只能多练、多记,刚开始连一个最简单的控制一盏小灯的亮灭的程序都不会写,只能抄写别人做成功的程序,一遍一遍的写,直到能熟练的独自将程序写出来,从简单的入手,逐步的积累,对单片机就会有新的认识,能够自己独立的写一些小的程序,能够将小的程序结合到一起,拼接成较为复杂一些的程序。刚接触KEIL时确实很让人头疼,使用KEIL不会建项目、不会使用实验板。遇到困难要一件件攻克,不会建项目,就到教学视频里找,仔细看一下,做几次就懂了。然后可以参考已经成功的程序,抄过来,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序,要做的工序不会差多少,总得建个项目,再配置一下项目,然后建个程序,加入项目中,再写代码、编译、生成HEX,刷进单片机中、运行。
我的英文得到了提高,自己也爱上了单片机,下面是我学习单片机中的一些经验总结:1.万事开头难,要勇敢的迈出第一步。开始时候是有点难度,但不要为自己找借口,要勇敢的迈出第一步,以后的路就会慢慢地顺起来了。2.知识点用到才学,不用的暂时放在一边。这个世界,如果每样东西都学,自己就会太累,但这并不是说有些东西可以不学,像在哪里都可以用到的时序图等就要好好的研究一下了。3.程序不要光看别人的而不写,一定要自己看了别人怎么写后自己再写一遍,最好这时什么都不要参考,凭自己的印象去写,遇到错误时再好好看下,可以收到事半功倍效果。4.必须学会掌握调试程序的方法,自己的程序遇到错误时一定要自己慢慢的把它调出来,有些人写好程序后发现问题,就到q群里或论坛上发表帖子,等着别人来回答,这对自己是没有好处的。5.找到解决问题的思路比找到代码更重要,世界上的事情千变万化,就像不可能找到两片相同的叶子一样,世界上也找不到使用同一个代码的项目,所以要学会自己分析问题,找出解决问题的方案。6.开动脑筋,运用多种方法,不断优化自己的程序,这是锻炼你写程序能力的一个很好的方法,这对于提高元器件执行的效
率也是很重要的。7.看别人的代码,学习别人的思路。这是一种很有用的方法,可以把别人的思路与自己的相比较,发现自己的优缺点。8.着重培养自己解决问题的能力,而不是看自己写过多少代码或者做过什么,这个最好的方法就是做一些具体的项目,从中培养自己解决问题的能力。9.尝试写一下综合应用的程序,这个是很重要的,因为独立可以的综合在一起后并不一定可以正常工作。10.如果有可能,多学习一下计算机专业的课程,例如数据结构,毕竟单片机与程序的设计也是不能分开的,这是一个综合的科目。11.面对一个新的项目,要先自己想下怎么做,而不是单单地找别人的代码,这是很重要的,因为只有这样做,自己才能独立去思考一个新的东西,也更有可能创造出一个更好的程序。
有时候单片机的学习很单调,有些知识学起来很抽象,不容易理解,只能慢慢适应,一边学习理论知识,一边编写程序,将程序刷入单片机进行调试,通过这种方式才能更快速的学习单片机。同事也会从学习中体会成功的喜悦。
好了,自己的单片机的学习心得也就这么几句,若有不对的地方,请多包涵,也愿学习单片机的人能学有所成。
篇七:单片机学习心得
单片机学习心得
计算机科学与技术
班
学号:
单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在里面的应用很多。学习单片机最好先从
汇编语言入手,虽然汇编语言是低级语言,编程效率低,但它比C语言占用内存小,执行速度快等优点,在刚接触单片机时更容易学习。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。
刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。它的应用范围很广,在工业自动化中应用有数据采集、测控技术。在智能仪器仪表中应用有数字示波器、数字信号源、数字万用表、感应电流表,自动取款机等。在消费类电子产品中应用有洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。在通讯方面应用有调制解调器、程控交换技术、手机、小灵通等。在武器装备方面应用有飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。学习单片机要投入大量的时间,如果只想速成,几乎是不可能的。由于单片机涉及的知识面很广,不可能在朝夕间就学会,只能一点点的积累。不积跬步,无以至千里。只有当你一步步去学习、去积累之后,你的单片机水平才会提高。学习过程中还要注重理解,要逐渐养成自己的编程思路,在编程过程中还要注意细节问题,如果因为粗心大意将
程序写错,将会无形间给自己带来更大的工作量,随着学习的深入,我们编写的程序将越来越长,如果出现很多错误,在
改错时将会很麻烦,出错越多你改的时间将会越长,就会无形间给自己带来更多麻烦。单片机(microcontrolunit)是一种集CPU、RAM、ROM、I/O、中断、定时/计数等功能为一体的完整的计算机,只需外加主频振荡器和电源,灌入应用程序就可以实现一定的功能。单片机的的应用特点是“面向测控”。因此,它必须有强力的信息处理、检测、控制的功能。学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编指令系统或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。
一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各
器件之间的工作必须相互协调所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线线,则线的数量将多得惊人,所以在微处理机中引
入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线
上,即相当于各个器件并联起来,但仅这样还不行,如果有两器件同时送出数据,一
个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是是不允许的,所以
要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有
多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称
控制
总线。
在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配
地址,才能
用,分配地址当也是以电信号的形给出的,由于存储单元比较多,所以,用于地址分的线也较多,这些线被称为地址总线。
二、数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的─数字,或者说都是串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据
。指令由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关,不可以由
单片机的开发者更改。地址:是寻找单片机内部、外部的存储
单元、输入输出口的依据,内
存单元的地址值
已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决,但有一些地址单元是一定要有的(详见程序的执行过
程)。数据:这是由微处理机处理的象,在各种
不同的应用电路中各不相同,一般而言,被处
理的数据可能有这么几种情况:
1地址(如MOVDPTR,#1000H),即地址1000H送入DPTR。
2方式字或控制字(如MOVTMOD,#3),3即是控制字。
3常数(如MOVTH0,#10H)10H即定时常数。
4实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOVP1,#0FFH,要灯全暗,则执
兄
令:MOVP1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实
际出的值。
理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指
令来
行了。
三、P0口、P2口和P3的第二功能用法
初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间
要有个切换的过程,或者说要有一条指令,事实各端口的第二功能完全是自动,不需要指令来转换。如、分别是WR、RD信号,当微片理机外接RAM或有外部I/O口
时,它们挥作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.或送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条SETB的指令,并且当单片机执行到这条指令时,也会使变为高电平,但使用者不会
这么做,因为这通常这会导致系统当溃(即死机)。
四、程序的执行过程
单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’个单元,并且在‘0000’单元中存放的一定是一条指令。
五、堆栈
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且
堆栈有特
的数据传输指令,即‘PUSH’和甈OP’,有一个特殊的专为其服务的单元,即堆栈指
针SP每当执一次PUSH
指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原
来值基础上)动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP值,就可以把堆栈设置在规定的内存单元中,如在程序开始时用一条MOVSP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元
开始往后8H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的浑乱
六:中断
当单片机应用于测控系统时,实时性就显得特别重要
了。而中断技术就是处理这种实时性要求高的场合。单片机的特点是一段程序反复执行,程序中的每个指令的执行都需要一定的执行时间,如果程序没有执行到某指令,则该指令的动作就不会发生,这样就会耽误很多快速发生的事情,例如,按钮按下时的下降沿。要使单片机在程序正常运行过程中,对快速动作做出反应,就必须使用单片机的中断功能,该功能就是在快速动作发生后,单片机中断正常运行的程序,处理快速发生的动作,处理完成后,在返回执行正常的程序。中断功能是需要合理控制的,在使用中的困难是需要精确地知道什么时候不允许中断发生(屏蔽中断)、什么时候允许中断发生(开中断),需要设置哪些寄存器才能使某种中断起作用,中断开始时,程序应该干什么,中断完成后,程序应该干什么等等。中断学会后,就可以编制更复杂结构的程序,这样的程序可以干着一件事,监视着一件事,一旦监视的事情发生,就中断正在干的事情,处理监视的事情。这就是中断功能的强大之处。
七:汇编语言与C语言
汇编指令有自己的一套繁琐的指令系统,不容易熟练掌握,编写程序不得不注意硬件细节。相对于C语言,汇编语言也有不可忽略的优势,就是在某些特殊场合需要高效的,占用存储空间小的地方。但随着技术的发展硬件的限制越来
越小,C语言比较好理解,通用性和可移植性都很不错。也不用记专门的指令集合来,所以我还是比较倾向于用C编写程序的。
篇八:单片机实训心得体会
通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训
是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。希望这次的经历能让我在以后学习中激励我继续进步。
篇九:
一:
时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机综合课程设计也在一周内完成了。
俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
虽然这次的课程设计算起来在实验室的时间只有三天,不过因为我们都有自己的实验板,所以在宿舍里做实验的时间一定不止三天。
硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。
当然,这其中也有很多问题,第一、不够细心比如由于
粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。
再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。
二:
熟悉单片机的人都知道,要学好单片机可不是一件容易
的事,倒不是因为单片机很难学,而是很难找到一本专为单片机入门者而编写的教材。翻一下身边的单片机教材,都好像是为已经懂单片机的人而写的,一般先介绍单片机的硬件结构和指令系统,再是系统扩展和外围器件,顺便讲一些应用设计(随便说一下,很多书中的电路设计已经过时,并且有些程序还是
错误的)。如果按照此种学习方法,想进行产品开发,就必须先把所有的知识全部掌握了才可以进行实际应用。学习使用单片机只能靠循序渐进的积累,下面就本人学习单片机的过程和经验做简要介绍。
首先,学习单片机要有一定的基础:电子技术方面要有数字电路和模拟电路等方面的理论基础,特别是数字电路;编程语言要求汇编语言或c语言。要想成为单片机高手,建议初学者首先学习汇编语言,学的差不多的时候,转入c语言学习。尽管汇编语言属于低级语言,编程效率低,但是较c语言具有目标代码简短,占用内存少,执行速度快等优点,更重要的是能使初学者尽快熟悉单片机的内部结构,并能对其进行精确的控制。汇编语言在单片机教材里面都会涉及,不需要单独购买教材和学习。c语言是一门学问,有很多专业书籍来讲解,并且对我们今后的编程生涯有绝对的好处,因此要深入学习,千万不要自以为看了某某的视频教程就以为掌握了c语言,那只是c语言的一部分。在这里给大家推荐
一本单片机c语言程序设计参考书,马忠梅等著,北京航空航天大学出版社出版的《单片机的c语言应用程序设计》,要求c语言基础。如果没学过c语言,建议学习清华大学谭浩强编写的c语言程序设计,这本书写的不错,通俗易懂。
其次,是单片机教材选择。单片机是一门非常重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有一定地了解和感官认识,它的是怎样工作的,能干些什么?刚开始时,也许你看不明白,但这并不要紧,因为你还缺乏实践经验。现在单片机应用广泛,因此各个厂家分别推出了自己的单片机,按内部结构体系派系分:51系列、pic系列、avr系列、摩托罗拉等等我们没必要每样都学!因为他们的编程方法和调试过程以及内部指令结构有一定的相似,只要学精通一款就ok了!尤其是用c语言编程,就几乎不用分什么派系,但是我们要选择一款有代表性的知识范围广,并且入门容易,书籍多。一般来说,mcs-51系列单片机已经得到广泛的普及和应用,市场上它的资料也比较多,用的人也很多。给大家推荐一些参考书,学习时只需要一本就足够拉。书名:《新编mcs-51单片机应用设计》,哈尔滨工业大学出版,张毅刚;书名:《单片机原理及应用》,高等教育出版社,张毅刚等;书名:《单片机高级教程:应用与设计》,北京航空航天大学出版社,何立民。相关教材还有很多,在这不一一列举。
然后,是开发工具和开发环境的选择。选择一块合适的学习板,对于初学者来说一般无力接受,如果经济条件允许、本人又对单片机很感兴趣、有从事相关工作意向的话,鼓励大家购买。随便说一句,学习板功能要求太全,具有流水灯、数码管、独立键盘、矩阵键盘、ad或da、液晶、蜂鸣器等就差不多啦,毕竟,功能齐全的价格比较高。仿真器对单片机初学者来说既是那么耳熟,同时又有些陌生,这主要是因为市场上传统的仿真器价格都在千元以上,对经济不是非常宽裕的人来说是不小的开支。同时仿真器是用来提高调试程序效率的,也不是非需不可的,如果你没有仿真器,遇到程序出错的时候,只好苦思冥想,反复烧写调试。随便推荐一下,学林电子的51tracer仿真器,有兴趣的朋友可关注一下。有了单片机教程板以后,先看下指导说明书,熟悉一下学习板,开卷有益。以后就得靠自己多练习了,将学习板与电脑连接好,先学会开发软件的使用,然后从最简单的流水灯实验做起,按照你自己的意愿控制流水灯,当你完成时,你会发现这是多么惬意的事情。太好玩了,你会觉得这不是在学习,而是在玩,当你发现,单片机能够按照你编写的程序工作时,你会觉得非常兴奋。
比做什么事情都开心,这样你会慢慢迷上单片机,真的。不少站上说搞定某个实验,就恭维的告诉你一声”恭喜你,学会了”自己学会了单片机,这有点可笑,这只能说明你算
过关了,对单片机有了一定了解和会使用它了。但是单片机能完成的功能太多了,尤其是对外围器件的控制,综合起来能设计出许多意想不到的产品.因此除了入门外,精通可千万别轻易说出口。
最后,在熟练掌握和应用后,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。最终,自己完全设计具有个人风格的电路,产品,这样你就是单片机高手拉。只要过了第一关,后面的路就好走多了,万事开头难,大家可能都听过。时下多家电子类的报刊杂志如:《电子制作》《无线电》《电子报》《电子世界》都开设了详细的单片机教程专栏,对于想学习单片机的朋友来说帮助很大,可以说现在的单片机教程环境是最好的,有络,有书籍,有报刊杂志,还有视频教程,元件的采购方面也非常充足,相关的器材又多有便宜。如果每天能抽出两小时的时间去学习,快的一个月,慢的三个月就入门拉。
以下是一些经验:
(1)学习单片机没有捷径,别指望两三天就学会,要坚持不懈,重在积累。
(2)别崇拜高手,别相信天才,大部分人都不是天才(相信你也不是)!
(3)单片机是一门应用性和实践性很强的学科,要多
动手,多做实验。
(4)要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。
(5)碰到问题可以借助络来搜寻答案和对自己有帮助的问题,可以大大减少你的开发时间。
(6)要多交一些朋友,多交流。技术是靠不断的积累和交流才会进步的,封闭自守只会更加落后。
希望大家多上看看前辈的经验,可以少走很多弯路。最后,祝愿大家早日成为单片机高手。
三:
我从大二起,就去实验室去学习。在这里与老师和一些电子设计爱好者的交流中,我学到了更多的专业知识。我从此走上了学习嵌入式的道路。这丰富了我的大学生活,是我在大学的最大收获。
我是从学习单片机开始我的嵌入式学习的。
我接触单片机的方式是在图书馆看书,我看了很多本书,但是大多数书写的大同小异。书里面讲解的单片机的寄存器我看了很多遍也没有看懂。我都不知道改怎么学习它了。慢慢的我悟出了一个道理:电子的学习实践是最重要的,这样,我在大二的时候就买了一块学习板,我一边看视频一边仿照视频的程序,自己编写程序,在很短的时间里,我的单片机有了很大的提高。那些难懂的寄存器通过编写程序,我慢慢的弄懂了它们,现在回头看去,原来它还是很简单的。
用哪种编程语言最适合我们。
我看过的单片机的书籍,大部分的程序都是汇编写的。它是一种基于机器硬件的低级语言,对于我们这些只学习过c语言的人来说,非常难懂。我认为刚开始学习单片机没有必要一定要从学习汇编编程开始。我学习单片机就是用c语言编程的,我并不会汇编语言,也没有妨碍我把单片机学好。
我的单片机学习心得。
很多人说,学单片机最好先学汇编语言,以我的经验告诉大家,绝对没有这个必要,初学者一开始就直接用c语言为单片机编程,既省时间,学起来又容易,进步速度会很快。在刚开始学单片机的时候,千万不要为了解单片机内部结构而浪费时间,这样只能打击你的信心,当你学会编程后,自然一步步就掌握其内部结构了。
单片机的学习实践。
单片机提高重在实践,想要学好单片机,软件编程必不可少。但是熟悉硬件对于学好单片机的也是非常重要的。如何学习好硬件,动手实践是必不可少的。我们可以通过自己动手做一个自己的电子制作,通过完成它,以提高我的对一些芯片的了解和熟练运用它。这样我们就可以多一些了解芯片的结构。我相信,你完成了一个属于自己的电子制作,你
的单片机水平就会有一个质的提高。
这就是我学习单片机的心得体会,希望给单片机的爱好者学好单片机有所帮助。
四:
在学校学习期间我有幸的参加了学校的单片机学习小组,在小组里我了解了什么是单片机,单片机有哪些用途,利用单片机可以实现哪些功能来方便人们的生活如交通灯,时钟,还有手机中,电子玩具等等,它们里面都有单片机的存在来实现某种功能。通过在单片机小组里的学习我简单总结了几点心得和体会:
第一:万事开头难,要勇敢的迈出第一步,不要总找借口说没有学习过就总推脱。凡事都有第一步可以先可简单的来,然后可以逐步的向深层次学习。可以从建项目开始,然后可以找一个简单的小程序先把它敲进单片机内然他运行起来,感觉一下单片机的运行,让自己了解单片机整个运行。
第二:对于知识点,学过的要掌握牢固,对于没有学的和暂时用不到的先不用学习。比如:小灯得点亮就没有用到中断可以先不用看。这样可以避免知识过多记不住的麻烦。对于程序这里的知识点不能只停留在理论层次上,一定要结合着程序进行学习这样才能掌握的很牢靠,当用到哪里的知识点不记得了可以去看书,对于用不到的可以不去看。
第三:程序不要只是看别人得,一定要自己写过才是自
己的。开始不懂可以参考别人的,看看每一句代表着什么意思,能够实现什么现象。明白之后自己再重新写一遍,你会发现看别人的能懂到自己写的时候很困难。当你自己能写出来的时候说明你真懂了。
第四:一定要学会程序调试的方法。有时候把程序写完了然后运行时不能实现理想的现象。这时有人就晕了不知该怎么办,然后就去问别人。当别人找出问题出在哪里时就会恍然大悟。其实当遇到问题一定要自己尝试着解决,不能遇到问题就去问别人。自己一定要掌握解决问的方法和思路。
第五:在学习初期看别人的代码,学习别人的思路这个很有用。通过看别人的代码特别是有多年编程经验的人的程序,可以迅速提高自己的编程水平。也可以结合着别人的手法,与自己的想法结合在一起写出更好的程序。但是切记将学习变成抄袭,不能认为抄袭别人的你就学会了,这样只能使你退步。第六:面对一个新项目时,自己一定要多想想,不要急着去看别人是怎么写的。有的人看到新项目时就去找别人的然后抄一小段,自己在写几句,放在一起完成任务,虽然省时间但不利你的学习。当你遇到一新项目时你应该先想一下程序的构架,想想如何来完成。然后自己动手去写,当你遇到实在是没办法解决的问题时再去请教别人,看他是怎么处理的,学习他的方法。这样起码你自己想过了,有自己的思路不会受到别人的影响,这样更容易提高自己。
在单片机的学习开始时感觉很吃力,在不断的学习过程中慢慢的对单片机产生了些好感,而且在编写程序过程中吃力的感觉慢慢的淡了。在这其中基础知识掌握牢固是非常重要的,然
篇十:学习单片机心得
学习单片机的心得
一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很大,我们平时说的C51,C52,S51,S52都是51内核的,只是内存容量有差别,或是烧写程序的方法不同。只要你学会了51,那什么凌阳,AVR,什么样原理都是一样。触类旁通。
先说说就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那些管角的电平什么时候输出高,什么时候输出低。而由这些高低电平的变化来控制由单片机为核心的系统板。从而实现我们需要的各个功能。对于看书,我们只需大概看看了解一个单片机各个管角都是干什么的?都有什么样的功能,能实现什么样的功能?其实第一次,第二次你可能都看不明白,但这不要紧,因为你没
有和实际的物体建立起来这样一种互通的观念,所以我总是说,学单片机看书看两三天的时间就够了,看小说你一天能看五六本,看单片机你两三天看两三边就够了,而且可以不用很仔细的看。推荐一本书,就这一本就足够,书名忘了,是哈尔滨工业大学出版社出的的,作者是张毅刚。大概三四百页吧。大概了解一下书上的内容后,就开始做实践,这是非常关键的,如果说学单片机你不做实践那是不可能学会的,关于做实践有两种方法你可以选择,一种方法:你自己花钱买一块单片机的学习板,不要求功能太全的,对于初学者来说你买功能非常多的那种板子,上面有很多东西你这辈子都用不着,我建议有流水灯,数码管,独立键盘,矩阵键盘,有AD或DA(原理一样),有个简单的液晶,有蜂鸣器,这就差不多了,如果上面我提到的这些东西你能让它都熟练工作了,那可以说对于单片机方面的硬件你已经入门了,再剩下的就是自己练习设计其它电路,这需要你练习,不断的积累经验,只要过了第一关,后面的路就好走多了,万事开头难,大家可能都听过。方法二:你身边如果有单片机方面的高手,向他求助,让你帮你搭个简单的最最小系统板,其实对于高手来说,做个单片机的小系统板只需要一分钟的时间,而对于初学者可就难多了,因为只有你对硬件了解了才会对它熟悉。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你最好是自己买上一块,毕竟自己有一
块要方便的多,以后做单片机类的小实验时都能用得上,还剩事。(买的时候找我)
有了单片机学习板之后你就是不停的练习了,我在后面会讲到我的大学生活,如果你感兴趣你可以看看,如果不感兴趣呢,看完这段你就可以继续你的快乐生活了。前面我提到单片机是一项非常注重实践的学科,你最好是自己有台电脑,一天少看电影,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在学习知识,而是在玩,当你编写的程序按你的意愿实现时你比
做什么事都开心,你会上瘾的,真的。做电子类的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人,当得到解答后你会记住一辈子的,知识必须用于实际才能发挥出它的作用,否则你自己好好想想,你上了这么多年大学,天天上课,你在课堂上学到了什么?你不是为了每学期的期末考试忙碌吗?考完试一看得了90分,哈哈哈好高兴啊,下学期开学回来忘的一干二净,是不是?你学到什么了?但是我告诉你单片机你一旦
学会,永远不会忘了。另外我再说说用汇编和C语言编程的问题。很多同学大一二就开设了C语言的课,我也上过,我知道那时天天就是几乘几,几加几啊,求个阶乘啊。学完了有什么用?让你用C语言编单片机的程序你是不是就悄悄了?所以书上的东西我们必须要实践。单片机编程你想用C语言和汇编语言都可以,但是我建议你用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C语言也挺简单,只是一门工具而已,我劝你最好学会,将来肯定用得着,要不你以后也得学,你一点汇编都不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。汇编写程序代码效率高,但相对难度较大,而且很罗嗦,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写的任何代码,C语言的资料又多又好找,将来可移植性非常好,只需要变一个IO口写个温度传感器的程序在哪里都能用,所以我劝大家用C语言。
总结上面,只要你有信心,做事能坚持到底,有不成功不放弃的强烈意志。那学个单片机来说就是件非常容易的事。
步骤:1。找本书大概了解一下单片机结构,大概了解
就行。不用都看懂,又不让你出书的。(三天)
2。找学习板练习编写程序,学单片机就是练编程序,遇到不会的再问人或查书找。
(二十天)
3。自己上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。
(十天)
4。自己完全设计具有个人风格的电路,产品,。。你已经是高手了。
。。
看到了吗?下功夫一个多月你就能成为高手,我就讲这么多了,学不学得会,下不下得了功夫就看你的了
从51初学者到电子工程师1
很多电子工程师在某个方面精深钻研,成为某一个特殊领域的专家,从一开始的养家糊口、慢慢小有收益、最后宝马豪宅,也是有的;这些电子工程师可能没有全面掌握这些知识,因为这些行
业用不上,例如,液晶显示器,很多行业就不需要;但是,对于一个初学者,我认为,这个提纲是切合实际的,对于面向控制而言,已经基本够用了;对于初学者,全面地掌握这些知识是很有必要的,因为你不知道今后需要使用什么哪些知识,而这些知识,80%以上你会在今后的工作中使用上,因为这是都是最基本的。熟练掌握这些知识和应用,根据不同的地区、行业和老板,月薪应该可以在3000元~5000元之间,甚至更高。
其实,可能有些你用不上,但是知道了也没有坏处;所谓书到用时方很少,又有谓艺不压身。知识=月薪=年薪=金钱=香车宝马=..,呵呵。
为什么要掌握这些知识?
实际上,电子工程师就是将一堆器件搭在一起,注入思想(程序),完成原来的这些器件分离时无法完成的功能,做成一个成品。所需要的技能越高、功能越复杂、成本越低、市场上对相应的东东的需求越大,就越成功。这就是电子工程师的自身的价值。从成本到产品售出,之间的差价就是企业的追求。作为企业的老板,是在市场上去寻找这样的应用;对电子工程师而言,是将老板提出的需求或者应用按照一定的构思原则(成本最低、可靠性最高、电路板最小、功能最强大等)在最短的时间内完成。最短的时间,跟电子工程师的熟练程度、工作效率和工作时间直接有关。这就是电子工程师的价值。
将电子产品抽象成一个硬件的模型,大约有以下组成:
1)输入
2)处理核心
3)输出
输入基本上有以下的可能:
1)键盘
2)串行接口(RS232/485/canbus/以太/USB)
3)开关量(TTL,电流环路,干接点)
4)模拟量(4~20ma、0~10ma、0~5V(平衡和非平衡信号))
输出基本上有以下组成:
1)串行接口(RS232/485/canbus/以太/USB)
2)开关量(TTL、电流环路、干接点、功率驱动)
3)模拟量(4~20ma,0~10ma,0~5V(平衡和非平衡信号))
4)LED显示:发光管、八字
5)液晶显示器
6)蜂鸣器
处理核心主要有:
1)8位单片机,主要就是51系列
2)32位arm单片机,主要有atmel和三星系列
51系列单片机现在看来,只能做一些简单的应用,说白了,这个芯片也就是做单一的一件事情,做多了,不如使用arm来做;还可以在arm上加一个操作系统,程序既可靠又容易编写。
最近三星的arm受到追捧,价格便宜,以太和USB的接口也有,周立功的开发系统也便宜,作为学习ARM的产品来说,应该是最好的;作为工业级的控制,是不是合适,在友中有不同的看法和争议。本公司使用atmelARM91系列开发的1个室外使用的产品,在北京室外使用,没有任
何的通风和加热的措施,从去年的5月份到现在,运行情况良好。已经有个成功应用的案例。
但对于初学者来说,应该从51着手,一方面,51还是入门级的芯片,作为初学者练手还是比较好的,可以将以上的概念走一遍;很多特殊的单片机也是在51的核的基础上增加了一些I/O和A/D、D/A;也为今后学习更高一级的单片机和ARM打下基础。再说了,哪个老板会将ARM级别的开发放在连51也没有学过的新手手中?
在51上面去做复杂的并行扩展是没有必要的,比如,扩展I/O口和A/D、D/A等等,可以直接买带有A/D、D/A的单片机;或者直接使用ARM,它的I/O口线口多。可以使用I2C接口的芯片,扩展I/O口和A/D、D/A,以及SPI接口扩展LED显示,例如:MAX7219等芯片。
市面上一些比较古老的书籍中还有一些并行扩展的例子,如:RAM、EPROM、A/D、D/A等,我觉得已经没有必要去看了,知道历史上有这些一回事就行了;
这些知识,是所有产品都具备的要素。所以要学,再具体应用。
说一个小的故事:野人献曝。
从前,有一个农民,冬天干了活后,休息晒太阳。好舒服呀。
他想,这么舒服的享受,我要献给国王,让他也能得到
享受。
于是他兴冲冲地到了王宫,将他的宝贵经验献给了国王。
我现在就象这个农民,把自己认为很宝贵的经验献给大家。希望大家多提宝贵意见;拍板砖也可以,骂我也无所谓,呵呵,随便。
第一课:51单片机最小系统
实际上,51单片机核心外围电路是很简单的,一个单片机+一个看门狗+一个晶振+2个磁片电容;
1.单片机:atmel的89C51系列、winbond的78E52系列,还有philips的系列,都差不多;现在有一些有ISP(在线下载的),就更好用了;
2.看门狗:种类很多,我常用的有max691/ca1161和DS1832等,具体看个人习惯、芯片工作电压、封装等。Max系列和DS系列,还有IMP公司的,种类很多,一般只需要有最基本的功能就可以了;原来我使用max691,但是max691比较贵,因为它有电池切换功能,后来新设计电路板,就都采用ca1161了。
很早以前的电路设计中,现在可能还有人使用,使用一个电阻和一个电容达成的上电复位电路;但是,这样的复位电路一个是不可靠,为什么不可靠,络上能找得到专门论述复位电路的文章;