欢迎来到工作总结网!

单片机实训个人报告总结

心得体会 时间:2022-11-28

【www.zgzsclpt.com--心得体会】

单片机实训的心得体会

单片机实训报告一周的实训,让我们从另一个角度去发现单片机。期间我学会了很多宝贵 的知识和经验,在这次单片机实训中我们巩固了我们平时所学的内容;加深了 对各种调试和仿真软件的使用技能;掌握了单片机应用电路的设计和调试方法。

首先,我们要从所给定的元器件中设计出 6 个不同的电路,并编写程序实 现相关任务要求。我们小组设计出的电路主有: (1)数码管轮流显示百十个位的数。要求:数据来源于拨码开关;个位显 示完毕停留的时间稍微长些。

(2)定时计数器实现对外部脉冲计数 5 次后,流水灯的状态由亮点左流动 转化成闪烁 5 次,然后回到初始状态。

(3)单键改变流水灯状态。按键一旦按下,流水灯状态由暗点右流动转化 成闪烁 8 次,然后回到初始状态。

(4)双键改变流水灯状态。按键 K0(连接 INT0)按下,流水灯状态由亮点 左流动,转化成闪烁 5 次,然后回到初始状态;按键 K1(连接 INT1)按下,流水 灯状态由亮点左流动,转化成暗点右流动至最右端,然后回到初始状态;并且 按键 K1 级别高于 K0。

(5)串口输出数据,实现在 2 个数码管上显示 60 秒计数器。

(6)在集成的 8 位数码管上动态显示出:1——8 的效果。

其次,我们要对我们所设计的电路进行电路布局、连线,检查电路是否出 现错误或者遗漏。

然后,学会用 KEIL 软件调试程序,并用该软件菜单的各项调试工具和窗口。

再结合硬件和软件,进行整体调试。

最后,当我们根据相关要求从所给定的元器件中设计出 6 个不同的电路、 编写程序、线路布局,调试成功,我们的设计就完成了。

在这实训期间我深刻的认识到了理论知识和实践操作必须是相结合的,也 许在实训时会有很多各种软、硬件等故障。

在编程时我们就出现了很大的障碍, 本来还以为编程会很简单的,等到实际 操作起来才知道它的复杂性,没有想像中的那么得心应手, 最后不得不求出其他 小组,原来本身程序的思维是正确的,只是步骤中有点小错误,所以导致整个程 序的结果很乱。

我们在做双键改变流水灯状态的电路时又发现了一个头痛的问题,发光二 极管不亮、开关不管用,刚开始的时候,我们检查了好几遍就是没有发现问题, 快要失去耐心是发现少两连接了两根线,这是个好现象让我们有了继续往下的 勇气,终于在反复的检查研究中,我们发现发光二极管不亮的正负方向反了, 开关接错了位臵,这才导致连接线路期间的错误不断。结果是可喜的,在我们 小组竭尽全力,同学老师的帮忙下,我们的电路很成功。 我们会遇到很多挫折,不要气馁,不要放弃。我们只有这样才能提高自己 的实际操作能力;培养自己独立思考能力;树立良好的心理素质和吃苦耐劳精 神。因此,本实训对培养学生正确的劳动观念、组织纪律性、团队合作精神

单片机实训心得体会

通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以 51 单片机为核心部件,利 用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本 设计题目的基本要求和发挥部分。

由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一 些具体细节问题需要解决。例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展 功能。

踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。当看着自己的程序,自己成天相伴的系统能 够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。

但在这次实训中同时使我对汇编语言有了更深的认识。当我第一次接触汇编语言就感觉很难,特别 是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。这次的实训使培养了我们严肃认 真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。

这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正 的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所 突破。希望这次的经历能让我在以后学习中激励我继续进步。

单片机实习报告

实习报告题目:银行信息显示系统 学院:电气信息工程学院 专业:电子信息科学与技术 班级:13-1 学号:13 姓名:黄洵 指导教师:刘海波 日期:2015 年 3 月 7 日~3 月 19 日 一、设计总体方案1.1 设计要求通过单片机控制显示器的显示银行信息,并且滚动显示。1.2 设计思路用单片机控制 lcd12864 液晶显示和银行的各种信息,并用 4×4 矩阵键盘控制液晶显示滚动的方向和信息滚动的快慢。1.3 设计方案首先将该系统划分成硬件和软件两大模块:将硬件模块划分成单片机系统,显示 系统,键盘系统和其他模块四个部分;再将软件模块划分成矩阵键盘和 12864 显示驱动两个部分。整个系统即有这几个小系统构成。二、硬件电路设计2.1 单片机系统51 单片机是对所有兼容 Intel 8031 指令系统的单片机的统称。该系列单片机的始祖是 Intel 的 8031 单片机,后来随着 Flash rom 技术的发展,8031 单片机取得了长足的进展,成 为应用最广泛的 8 位单片机之一,其代表型号是 ATMEL 公司的 AT89 系列,它广泛应用于 工业测控系统之中。很多公司都有 51 系列的兼容机型推出,今后很长的一段时间内将占有 大量市场。51 单片机是基础入门的一个单片机,还是应用最广泛的一种。2.2其他器件介绍该电路设计思路为先通过变压器来将 220V 电压将为 22V 低压,然后再通过 桥式整流电路将交流整流为直流,最后通过 LM317 变压输出所需的 5V 电压。 2.3显示系统设计12864LCD 是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及 128×64 全点阵 液晶显示器组成。可完成图形显示,也可以显示 8×4 个(16×16 点阵)汉字或者显示 16×4 个(8×16 点阵)ASCII 码。分为两种,带字库的和不带字库的。不带字库的 LCD 需要自己提 供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的 LCD 提供字库字模,但是只能显示 GB2312 的宋体。各有优缺点,根据不同应用场景灵活 选择。其液晶模块原理图如下所示。2.4 键盘系统介绍矩阵键盘又称为行列式键盘,它是用 4 条 I/O 线作为行线,4 条 I/O 线作为列线组成的 键盘。

在行线和列线的每一个交叉点上, 设置一个按键。

这样键盘中按键的个数是 4×4 个。

这种行列式键盘结构能够有效地提高单片机系统中 I/O 口的利用率。

图 1 为矩阵键盘电路图,行线接 P3.4-P3.7,列线接 P3.0-P3.3。 三、程序设计3.1 主程序流程图开始初始化键盘扫描左移右移加速减速lcd显示结束3.2 各部分流程图矩阵键盘12864 驱动程序四、实习心得通过这次实训, 使我们能够学以致用, 在实践中进一步掌握并巩固我们的单片机理论知 识。虽然在实训中遇到了不少难题与困惑,暴露出了不少问题和缺乏实践的弱点,但是在老 师与同学们的帮助与指导下, 我们最终解决与克服了一个个的困难与困惑, 顺利的完成了老 师交给的实训任务。

通过几天下来的实训, 感觉就是自己的知识实在是太浅了。

在课本上学到的知识感觉自 己都懂了,但在实际应用中还是无从下手。所以我们不应满足于课本上的知识,只有通过不 断的实践,才能够真正掌握理论知识。虽然只有几天的时光,但还是学了很多的东西,比之 于平常的上课更觉得学到更多。所以,这对于我们还是一门很必要的课程。当然,要真正学 有所用,我们还要在实践中去不断提高,不断完善。其实刚开始还是不太喜欢实训,也有点 害怕的。

但过后才觉得只有几天的实训时间还是有点少, 毕竟是刚开始对单片机进行实际应 用,还是很陌生的。由于时间的仓促,自己的作品也远还没达到完善的地步。

我相信其中的酸甜苦辣最终都会化为甜美的甘泉。

想借此机会感谢一直以来给我帮助的 所有老师和同学。

尤其我的指导老师们, 他们一直都以一位长辈的风范来给我不厌其烦的指 导。在此,特向他们道声谢谢。五、参考资料[1]何立民.单片机应用系统设计.北京:北京航空航天大学出版社,2004. [2] 张洪润等.单片机 应用设计 200 例.北京:北京航空航天大学出版社,2006. [2]刘德营,张志霞,龚丽农等.单片机原理及接口技术.北京:中国水利水电出版社,2006 [3]陈伟人.单片微型计算机原理及其应用.北京.清华大学出版社,1989 3.何立民.单片机应用 系统设计.北京:航空航天大学出版社,1995 4.王建校等.51 系列单片机及 C51 程序设计.北 京:科学出版社,2002 [4].余锡存,曹国华.单片机微机原理及接口技术[M].西安:西安电子科技出版社,2000: [5]付家才.单片机控制工程实践技术.北京:化学工业出版社,2001 [6]雷晓平等.单片计算机及其应用.成都:电子科技大学出版社,2005.六、附录(程序清单)#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int /************* 12864LCD 引脚定义 *************/ #define LCD_data P0 //数据口 sbit LCD_RS = P3^0; //寄存器选择输入 sbit LCD_RW = P3^2; //液晶读/写控制 sbit LCD_EN = P3^1; //液晶使能控制 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; /*********************************************************/ uchar code DIS1[] = {" 存款利率 "}; uchar code DIS2[] = {" 一年:2.79% "}; uchar code DIS3[] = {" 二年:3.37% "}; uchar code DIS4[] = {" 五年:5.56% "}; uchar code DIS5[] = {" 请一号到窗台 uchar code DIS6[] = {" 办理业务 uchar code DIS7[] = {" 请二号到窗台 uchar code DIS8[] = {" 请四号到窗台 uchar code DIS10[] = {" uchar code DIS9[] = {" 欢迎光临 uchar index = 0; uchar key,s=0;"}; "}; "}; "}; "}; "}; uint v; void matrixkeyscan() ; //矩阵 void delay(int ms) { while(ms--) { uchar i; for(i=0;i<150;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } void matrixkeyscan() { uchar temp; P2=0xfe; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; switch(temp) { case 0xee:key=1,index = 0;break; case 0xde:key=2,index = 0;break; case 0xbe:key=3,index = 0;break; case 0x7e:key=4,index = 0;break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } P2=0xfd; temp=P2; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P2; temp=temp&0xf0; if(temp!=0xf0) { temp=P2; switch(temp) { case 0xed:key=5,index = 0; break; case 0xdd:key=2, index = 0, s++; break; case 0xbd:key=7;index = 0; break; case 0x7d:key=8;index = 0; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } } } } } void delay1(int ms) { while(ms--) { uchar y; for(y=0;y<100;y++) ; } } bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } void lcd_init() {lcd_wcmd(0x34); delay(5); lcd_wcmd(0x30); delay(5); lcd_wcmd(0x0C);//扩充指令操作 //基本指令操作 //显示开,关光标 delay(5); lcd_wcmd(0x01); delay(5); }//清除 LCD 的显示内容void lcd_pos(uchar X,uchar Y) { uchar pos; if (X==1) {X=0x80;} else if (X==2) {X=0x90;} else if (X==3) {X=0x88;} else if (X==4) {X=0x98;} pos = X+Y ; lcd_wcmd(pos); } void photodisplay(uchar *bmp) { uchar i,j; lcd_wcmd(0x34); //写数据时,关闭图形显示 //显示地址for(i=0;i<32;i++) { lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x80); //写入垂直坐标值 for(j=0;j<16;j++) //再写入两个 8 位元的数据 lcd_wdat(*bmp++); delay1(1); } for(i=0;i<32;i++) { lcd_wcmd(0x80+i); lcd_wcmd(0x88); for(j=0;j<16;j++) lcd_wdat(*bmp++); delay1(1); } lcd_wcmd(0x36); } void clr_screen() { lcd_wcmd(0x34); delay(5); lcd_wcmd(0x30); delay(5); lcd_wcmd(0x01); delay(5); } void bytecode() { uchar s; clr_screen(); lcd_wcmd(0x80); for(s=0;s<16;s++) { lcd_wdat(0x30+s); } lcd_wcmd(0x90); for(s=0;s<16;s++) { lcd_wdat(0x40+s); } lcd_wcmd(0x88); for(s=0;s<16;s++) { lcd_wdat(0x50+s); } lcd_wcmd(0x98); for(s=0;s<16;s++) { lcd_wdat(0x60+s); } } void main() { uchar i,key1; index=40; v=1000; s=0;//写完数据,开图形显示//扩充指令操作 //基本指令操作 //清屏//清屏 //设置显示位置为第一行//设置显示位置为第二行//设置显示位置为第三行//设置显示位置为第四行 delay(10); lcd_init(); while(1) { matrixkeyscan() ; if(s>=2) s=0; if(key==1) { lcd_pos(1,0); for(i=0;i<16;i++) { lcd_wdat(DIS1[i]); } lcd_pos(2,0); for(i=0;i<16;i++) { lcd_wdat(DIS2[i]); } lcd_pos(3,0); for(i=0;i<16;i++) { lcd_wdat(DIS3[i]); } lcd_pos(4,0); for(i=0;i<16;i++) { lcd_wdat(DIS4[i]); } delay(10); lcdflag(); clr_screen(); } else if(key==4) { v-=220;//上电,等待稳定 //初始化 LCD//设置显示位置为第一行//设置显示位置为第二行//设置显示位置为第三行//设置显示位置为第四行//清屏 if(v<100) v=220; key=key1; } else if(key==5) { v+=220; key=key1; }else if(key==2){ key1=key; lcd_pos(1,0); //设置显示位置为第一行for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); }if(s==0) { lcd_pos(2,0); //设置显示位置为第二行 for(i=16;i>0;i--) { lcd_wdat(DIS5[44-index-i]); } lcd_pos(3,0); //设置显示位置为第三行 for(i=16;i>0;i--) { lcd_wdat(DIS6[44-index-i]); } } else { lcd_pos(2,0);//设置显示位置为第二行 for(i=0;i<16;i++) { lcd_wdat(DIS5[index+i]); } lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) { lcd_wdat(DIS6[index+i]); } } lcd_pos(4,0); //设置显示位置为第四行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } index+=2; if(index>=28) { index = 0; } delay(v); lcdflag(); clr_screen(); }//清屏else if(key==3){ lcd_pos(1,0); //设置显示位置为第一行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } lcd_pos(2,0); //设置显示位置为第二行 for(i=0;i<16;i++) { lcd_wdat(DIS7[index+i]); } lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) { lcd_wdat(DIS6[index+i]); } lcd_pos(4,0); //设置显示位置为第四行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } index+=2; if(index>=28) { index = 0; } delay(500); lcdflag(); clr_screen(); } else { lcd_pos(1,0); //设置显示位置为第一行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } lcd_pos(2,0); //设置显示位置为第二行 for(i=0;i<16;i++) { lcd_wdat(DIS9[index+i]); } lcd_pos(3,0); //设置显示位置为第三行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } lcd_pos(4,0);//清屏//设置显示位置为第四行 for(i=0;i<16;i++) { lcd_wdat(DIS10[index+i]); } index+=2; if(index>=28) { index = 0; } delay(500); lcdflag(); clr_screen(); } } }//清屏

本文来源:http://www.zgzsclpt.com/xindetihui/214230.html

推荐内容