arm单片机面试问题问题:累加器A中的D4、D3位清零,D0、D1位置1

404 Not Found
The requested URL /design/article//700-1.html was not found on this server.你可能感兴趣的标签
热门资源推荐
&TI 最新应用方案,助力智能开发&TE最新技术文章和解决方案您现在的位置: >> 单片机实验 >> 单片机实训心得体会
单片机实训心得体会
来源: 时间:
【单片机实训】通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以 51 单片机为核心部件,利 用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本 设计题目的基本要求和发挥部分。由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一 些具体细节问题需要解决。例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展 功能。踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。当看着自己的程序,自己成天相伴的系统能 够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。但在这次实训中同时使我对汇编语言有了更深的认识。当我第一次接触汇编语言就感觉很难,特别 是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。这次的实训使培养了我们严肃认 真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正 的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所 突破。希望这次的经历能让我在以后学习中激励我继续进步。
【单片机实训】广东轻工职业技术学院实 训 报告实训项目单片机实训系别电子通信工程系 专业应用电子技术 嵌入式 091 班 姓名11222 学号6 指导老师丁向荣、赵慧 实训地点第三实训楼 C309 实训时间2011 年 1 月 10 日至 1 月 14 日1 前言单片机应用技术是现代电子设计的核 心技术,学习单片机只是就是要将单片机应 用到电子产品中,以单片机为控制核心实现 电子系统所需实现的功能。单片机的应用能 力很多程度上决定了电子类专业学生电子 设计与电子应用的水平与能力,尤其是高职 学生更是如此。本项目要求设计一个简单的电子时钟, 用六位 LED 数码管实现电子时钟的功能, 显示方式为时、分、秒,采用 24h(小时) 计时方式,使用按键开关可实现时分调整。通过电子闹钟项目的课题设计,让同学2 们体验项目设计的要点,了解项目设计的流 程,加深对单片机应用知识的学习,体会团 队协作的力量所在。为日后的嵌入式专业学 习巩固基础。目录1.概述…………………………………………………………1.1 系统的作用???????????????????????? 1.2 系统的功能要求 ???????????????????????2.系统硬件设计………………………………………………..2.1 系统的电路原理??????????????????????? 2.2 电路原理图???????????????????????? 2.3 各控制按钮控制功能说明??????????????????.3. 系统软件设计 ………………………………………………. 4.系统调试……………………………………………………. 5. …………………………………………………………3 1.概述1.1 系统的作用 本系统是利用 AT89C51 单片机结合 6 个七显示器以 24 时制 “时 时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置 8 组定 时闹铃和1组倒计时功能;当定时闹铃和倒计结束时,该电子时钟 通过蜂鸣器发出嘀嘀嘀响声;本系统还具有半点和整点报时功能, 当 现在时间为半点时会发出嘀的一声响,当现在时间为整点时报整点 数响声。由于该电子定时闹铃有强大功能可以在多种场合下使用, 利用七段显示器发光也可以在夜晚和黑暗场合下使用。1.2 系统的功能要求 (1)使用 6 位七段显示器显示 24 时制时间。(2)时间显示格式为“时时分分秒秒” 。(3)定时闹铃功能。(4)倒计时功能。(5)半点报时功能:当现在时间为半点时,蜂鸣器发出“嘀”4 一声响。(6)整点报时功能:当现在时间为整点时,蜂鸣器发出现在时 间整点数响声。(7)当任一闹铃时间到时发出连续“嘀嘀嘀”响声,七段显示 器显示“X HHMM” 。(8)当倒计时时间到时发出嘀嘀嘀响声,七段显示器显示 “000000” 。(9)定时闹铃、倒计时和现在时间模式可以互相切换而不影响 各自功能。(10)具有 4 个按键来进行功能设置,可以设置当前时间、8组 闹铃的时间设置和开关及倒计时的时间设置。(11)通过复位按键可以重启系统。2.系统的硬件设计 2.1 系统的电路原理 (1)系统以 AT89C51 单片机为本电路的核心元件,通过单片机 的 P0.0~P0.7 引脚和 A102J 排阻加上拉电压来驱动七段显示器段显 示数字。(2)通过单片机的 P2.2~P2.7 引脚连接 A103J 排阻拉升电压 信号,控制 6 个 8050NPN 三极管使共阴极七段显示器连通接地来循5 环点亮 6 位七段显示器。(3)在七段显示器供电的同时由 P0 脚驱动显示不同数字。根 据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定 的数字。(4)系统使用了 HYDZ 蜂鸣器,通过单片机 P3.7 引脚连接 8550PNP 三极管推动发声。(5)电路通过 4 个按键连接单片机 P1.0~P1.3 引脚低电平控 制系统功能设置。(6)单片机的复位电路,采用传统上电复位,通过 Reset 按键 控制。(7)电路可以通过+5V 和+12V 直流电供电,当使用+12V 直流供 电时,电路通过 1 个 7805 三端稳电器、2 个 35v100μ F 电解电容和 1 个 50v10μ F 电解电容转换成+5V 直流电供电。(8)系统通过一个发光二极管指示电路供电是或正常。2.2 电路原理图6 图示为数码管显示电路7 图示为主程序电路图2.3 各控制按钮控制功能说明KEY0(按键 INT0) :调时向左移一位数――接 P3.0 KEY1(按键 INT1) :当前位加 1――接 P3.1 KEY2(按键 T0) :当前位减 1――接 P3.2 KEY3(按键 T1) :确定调时时间――接 P3.38 S1:切换闹钟调时模式(高电平)――接 P3.4 S2:中断程序(高电平) ,中断当前的闹钟或整点报时的响应――接 P3.5 S3:暂停和开始计时(高电平)――接 P3.6 BELL:蜂鸣器――接 P3.7 ――当整点报时和闹钟响应的时候会响。LED 灯――当整点报时和闹钟响应的时候会亮。P1.0 ~ P1.3 分别接 LED 灯的高四位,P1.4 ~ P1.7 分别接灯的低四位。P0.0 ~ P0.7 分别口接数码管的段选的 a~h 位 P2.0 ~ P2.5 口分别接数码管的位选的 6~1 位3.软件设计表一 程序内存资源分配表 内存地址 20H 21H 22H 23H 24H 25H 26H 27H.0 27H.1 27H.2 27H.3 27H.4 27H.5 27H.6 SECON MIN HOUR 变量名称 作用说明 存放 50 毫秒计时 存放 0.5 秒计时 存放 1 秒计时 存放 1 分计时 存放 1 小时计时 用于中断 1(#6H) 用于显示中的闪烁 闹钟标志位 允许响铃 用于标志分、秒(1 为秒) ,闹钟功能时也一样 闹钟总开关(1 为开) 用于闪烁标志 用于闪烁 秒表标志9 表一 程序内存资源分配表 内存地址 27H.7 28H-29H 30H-35H 36H 37H-39H 40H 50H-52H 53H-55H 56H 57H 2AH.0 2AH.1 2AH.2 SP DISP 变量名称 作用说明 两组闹钟的标志位,默认值为 0 用于保存闪烁时的调时区地址 存放调时区地址 用于存放要显示的首字(例如秒) 第一组闹钟的时分 栈底 秒表 第二组闹钟的时分 存放闹钟调分地址 存放闹钟调时地址 闹钟组的切换标志(默认值为 0) 切换(默认值为 0) 闹钟第二组开关(默认值为 0)表二 芯片端口资源分配表 芯片端口 P1.0 P1.1 P1.2 P1.3 P1.7 P0 P2.2 P2.3 变量名称 K1 K2 K3 K4 SPK 作用说明 操作键 K1 操作键 K2 操作键 K3 操作键 K4 压电喇叭控制信号 七段显示器数数字形状控制 控制时间小时的十位七段显示器亮灭 控制时间小时的个位七段显示器亮灭10 表二 芯片端口资源分配表 芯片端口 P2.4 P2.5 P2.6 P2.7 P3.0 P3.1 P3.2 P3.3 BELL 变量名称 作用说明 控制时间分钟的十位七段显示器亮灭 控制时间分钟的个位七段显示器亮灭 控制时间秒钟的十位七段显示器亮灭 控制时间秒钟的个位七段显示器亮灭 蜂鸣器 LED 半秒闪烁 LED 显示第一组闹钟是否开启 LED 显示第二组闹钟是否开启表三 寄存器资源分配表 组 寄存器 R0 R1 第 0 组 R2 R3 R4 R6、R7 第 1 组 R0 R5 作用说明 存放秒显示地址 显示首址 #06H #0FEH #3H 延时初始值 用于 keyB、C 用于中断流程图显示如下:11 开始系统初始化 电子钟时分秒显示中断 允许 T0 中断 调时 0.3s 闪烁显示中断显示子程序按键子程序主程序流程图12 开始系统初始化判断中断S1=1?S2=1?S3=0?进入闹钟调时强制退出中断暂停计时返回计时结束功能选择中断13 开始N 开启按钮 中断? Y 继续计时进入按钮判断显示+1 YKey3=0? Y 退出按钮中断Key3=0?Key1=0? N调时位左移一位 Key2=0?显示-1调时程序流程图14 开始保护现场 N 中断 6 次? Y 当前调整位熄灭恢复现场返回调时 0.3s 闪烁显示中断15 源程序清单#include&reg51.h& #define uchar unsigned char #define led_data P0 #define led_bit P2 uchar conls=0x00; uchar cons=0x00; uchar con=0x00; uchar x=0x00;//P0 显示数码管当前位的数字 //P2 控制当前数码管显示的位数//记录秒分时的个位数 //记录秒分时的十位数 //记录调时程序当前位数 //记录闹钟sbit key0=P3^0; //key0 控制调时位左移以一位 sbit key1=P3^1; //key1 控制挑时当前位数字+1 sbit key2=P3^2; //key1 控制挑时当前位数字-1 sbit key3=P3^3; //确定当前挑时中断程序 sbit stop=P3^4; //用来暂时计时和启动计时 sbit baojing=P3^5; //用以响应整点报时和闹钟 sbit naozhong=P3^6; //用来开启闹钟调时程序 sbit beep=P3^7; //用来终止当前整点报时或闹钟响应 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; // 数码管当前位 0~9 的显示码 uchar data scan_con[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF}; //数码管左到右 6 个位的显示 uchar data dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00}; // 数码管的显示码 uchar data timedata[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //电子钟的初始时间:00:00:00 uchar data secclock[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //闹钟调时的初始时间:00:00:00 display(); //显示数码管函数申明 keyscan(); //调时按钮函数声明 //alarmcolk(); /******************************************************************** ****/ /* 1ms 延 时 显 示 程 序16 */ /******************************************************************** ****/ void delay(int z) { int x,y; for(x=0;x&z;x++) for(y=0;y&120;y++); } initializa();/******************************************************************** ****/ /* 主 函 数 */ /******************************************************************** ****/ void main() { initializa(); while(1) { display(); keyscan(); //alarmcolk(); } }/******************************************************************** ****/ /* 显示 子 程序 */ /******************************************************************** ****/ display() { for(k=0;k&6;k++) { led_data=table[dis[k]];led_bit=scan_con[k];delay(1);P2=0x00; } }17 /******************************************************************** ****/ /* 初始化子程序 */ /******************************************************************** ****/ initializa() { for(i=0;i&6;i++) { dis[i]=timedata[i]; } TH0=0X3C;TL0=0XB0; TH1=0x3c;TL1=0XB0; TMOD=0X11; ET0=1; ET1=1; TR0=1; TR1=0; EA=1; }/******************************************************************** ****/ /* 调时按钮处理子程序 */ /******************************************************************** ****/ keyscan() { int a=0,j; for(i=0,j=0;i&6;i++) //分别比较电子钟与闹钟时分秒 { if(timedata[i]==secclock[5-i]&&timedata[0]!=0) j++; } if(j==6) { if(beep==0) //若都相等,且没关闭响应 { for(i=1;i&10;i++)18 { baojing=0; P1=0x00; delay(500); baojing=1; P1=0 delay(500); } } } if(key3==0){con=0;x=0;TR1=0;ET1=0;TR0=1;ET0=1;} //关闭调时 按钮中断,继续显示电子钟的时间 else if(naozhong==0) //开启调时按钮中断 { EA=0; if(key0==0) { delay(10); while(key0==0); if(dis[con]==10) { dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7]; } con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con&=6) // 若 左 移 位 数 超 过 6,则关闭调时按钮中断,继续显示电子钟的时间 { con=0;TR1=0;ET1=0;TR0=1;ET0=1; } } if(con!=0) { if(key1==0) { delay(10); while(key1==0); timedata[con]++; //当前位数据+1 switch(con) { case 1case 3if(timedata[con]&=6) //1、3 位满 6 进一 { timedata[con]=0;19 } case 2case 4if(timedata[con]&=10) 进一 { timedata[con]=0; } case 5if(timedata[con]&=3) { timedata[con]=0; } default; } dis[con]=timedata[con]; dis[6]=0x0a; } } if(con!=0) { if(key2==0) { delay(10); while(key2==0); switch(con) { case 1case 3if(timedata[con]==0) { timedata[con]=0x05; 的减 1 处理 } else { timedata[con]--; } case 2case 4if(timedata[con]==0)20//2、4 位满 10//5 位满 2 清零//1、 位为 0 时 3//当前位数据-1 { timedata[con]=0x09; 的减 1 处理 } else { timedata[con]--; } case 5if(timedata[con]==0) { timedata[con]=0x02; 减 1 处理 } else { timedata[con]--; } default; } dis[con]=timedata[con];dis[6]=0x0a; } } EA=1; } else if(naozhong!=0) // 开 启 调 时 按 钮 中 断,功能类似上面 { EA=0; if(key0==0) { delay(10); while(key0==0); if(dis[x]&=10) { dis[7]=dis[x];dis[x]=dis[6];dis[6]=dis[7]; } x++;TR0=0;ET0=0;TR1=1;ET1=1; if(x&=6) { x=0;TR1=0;ET1=0;TR0=1;ET0=1; }21//2、 位为 0 时 4//当前位数据-1//5 位为 0 时的//减 1 处理//送显示数据 } if(x&=9) { if(key1==0) { delay(10); while(key1==0); secclock[x]++; switch(x) { case 1case 3if(secclock[x]&=6) { secclock[x]=0; } case 2case 4if(secclock[x]&=10) { secclock[x]=0; } case 5if(secclock[x]&=3) { secclock[x]=0; } default; } dis[x]=secclock[x]; dis[6]=0x0a; } } if(x&=0) { if(key2==0) { delay(10); while(key2==0); switch(x) {22 case 1case 3if(secclock[x]==0) { secclock[x]=0x05; } else { secclock[x]--; } case 2case 4if(secclock[x]==0) { secclock[x]=0x09; } else { secclock[x]--; } case 5if(secclock[x]==0) { secclock[x]=0x02; } else { secclock[x]--; } default; } dis[x]=secclock[x];dis[6]=0x0a; } } EA=1; } }/********************************************************************23 ****/ /* 0.3s 闪 烁 中 断 小 程 序 */ /******************************************************************** ****/ void time_intt1(void)interrupt 3 { EA=0;TR1=0;TH1=0X3C;TL0=0XB0;TR1=1; cons++; if(cons==6) //50ms x 6 =300ms =0.3s { cons=0x00; dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7]; } EA=1; }/******************************************************************** ****/ /* 电子钟显示进位处理程序 */ /******************************************************************** ****/ void time_intt0(void)interrupt 1 { { int i,j,x=0; j=0; if(naozhong==0&&stop==1) { ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1; conls++; if(conls==20) //20 次延时,秒+1 { conls=0x00; timedata[0]++; if(timedata[0]&=10) //10s 时,秒十位数+1 { timedata[0]=0; timedata[1]++; if(timedata[1]&=6) //60s 时,分+1 { //5 timedata[1]=0; timedata[2]++;24 if(timedata[2]&=10) //10min 时,分十位数+1 { timedata[2]=0; timedata[3]++; if(timedata[3]&=6) //60min 时,时+1 { timedata[3]=0; timedata[4]++; if(beep==0) { for(i=1;i&=(timedata[5]*10+timedata[4])&&beep==0;i++) 报时功能,几点钟就响几下 { baojing=0; P1=0x00; delay(500); baojing=1; P1=0 delay(500); timedata[0]++; } } if(timedata[4]&=10) 时,时十位数+1 { timedata[4]=0; timedata[5]++; if(timedata[5]==2) //当 h 等于 24 时,清零 { if(timedata[4]==4) { timedata[4]=0; timedata[5]=0; } } } } } } } for(b=0;b&6;b++)25// 整 点//10h// 分 别 向 各 个 位 送 显示码 { dis[b]=timedata[b]; } } ET0=1; } /*显示清零并转换成秒计时(原时间仍然保存)*/ /*else if(jishi==1) { for(j=0;j&6;j++) secclock[j]=0; ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1; conls++; if(jishi==0) ; else { //3 if(conls==20) { //4 conls=0x00; timedata[0]++; secclock[0]++; if(timedata[0]&=10) { timedata[0]=0; timedata[1]++; if(secclock[0]&=10) { secclock[0]=0; secclock[1]++; } } if(timedata[1]&=6) { timedata[1]=0; timedata[2]++; if(secclock[1]&=6) { secclock[1]=0; secclock[2]++; } } if(timedata[2]&=10)26 { timedata[2]=0; if(secclock[2]&=10) { secclock[2]=0; secclock[3]++; } } } } for(b=0;b&6;b++) { dis[b]=timedata[b]; } ET0=1; }*/ } }4.系统调试4.1 调试设备 4.1.1 硬件设备GQDJL-1 型单片机开发板 4.1.2 软件程序Keil μ Vision2 集成开发环境、STC 系列单片机 ISP 下载软件。C 语言编 写源程序代码。27 5.总结AT89C51 单片机作为嵌入式专业的入门基础,受到行业内的高 度重视。作为一名高职高专的学生,最重要的是实际操作能力,而对 于修读嵌入式专业的高职学生更是如此。单片机实训, 敲开了同学们 对知识求知若渴的大门。本周的单片机实训项目课题是定时闹铃。刚接到课题时感觉毫 无压力, 觉得自己的能力应该很快就可以完成, 因为本项目要实现的 功能只不过是同等于价值 2 元的电子闹钟! 但是现实却击垮了浮夸的我们。程序设计无从入手,调试错误,单片 机无响应……老师在讲解课题任务的时候确实是很简单,清晰明了。但是真正到我们设计的时候, 错误接一连二。由于对汇编语言掌握不 足,最终放弃汇编语言改换 C 语言编写程序。函数调用,设计循环 语,调用数组函数…… 一步步慢慢深入, 一点点渐渐掌握。最终, 经过小组成员不停地编码, 测试,运行,一个小项目终于完成。项目虽然完成,但通过本次实训确实感触不少。于嵌入式行业 而言, 单片机谈得上是基础, 但是就连这样一门基础我们也没有熟悉 掌握,对于日后 ARM 的学习就更是困难。不过在实训中我们也学会 了很多。项目设计、功能选定、搭建硬件工作环境、编写软件程序, 程序下载测试、 程序最终实现, 以及在项目设计中的团队分工与合作。嵌入式行业在我国日趋发展成熟,而嵌入式行业的人才28 却是十分紧缺,这就取决于嵌入式行业对技术型人才要求高的特点。要想在嵌入式行业站稳脚,就必须要痛下苦工,敢于钻研。相信通过 日后的专业知识学习,我们会在嵌入式学习的道路上越走越远。29
【单片机实训心得体会】单片机实训心得体会近两周的单片机实训结束了,最大的感受是,这是进入大学以来所学的最贴 近实际的一门课, 原来书本知识与实际操作之间竟然存在这样大的差距,让我不 得为今后的工作捏了一把汗,决心更加深入的学习,让自己成为实用型的人。在做喇叭自检时, 我们认为的把程序复杂化了,在做键盘自检时我们和大多 数同学一样,都没有把采样保持做好,虽然是第一个接受检查的,但我们还是按 老师的要求重新完善了程序。在做最后的任务时,我们组的任务是“乒乓球游戏机” ,开始觉得很有趣, 就是双方互打, 但是经过和老师的商量和自己站在一个 “消费者” 的角度考虑后, 发现我们的设想太简单了, 于是, 我们又给它加了 “计算比分” 、 “接住球后加速” 以及用不同的显示和声音来表示是否接住球, 最后我们又发现这个游戏机没有复 位功能,这能玩一次,但是我们用了几段程序都没有实现预想的效果,设计进入 了瓶颈阶段,最后,我们在图书馆查找资料,并按我们的要求修改,终于实现了 这个功能。由于我们测试的次数太多,我也“练就”了很好的打游戏的技术,呵呵,真 希望有机会把我们的设计变成产品,和更多人分享我们的乐趣。不过,我们现在 的水平离这一目标还差的很远,我们要继续努力。通过最后的测试, 我发现我对知识的掌握有些不透彻, 比如 “硬件编程框图” , 平时看过很多次但都没有用心记过,头脑中对他的记忆很模糊,因此,这就成了 我们知识结构中的一个盲点, 实训就是让我们在实际操作中发现自己对知识掌握 不足的地方并把它补足,我会继续把这些模棱两可的这是都用心学透彻。在整个实训过程中, 同组三配合的十分默契,虽然我们对知识的掌握不 尽相同,但是我们却各具所长,我想这就是“团队”的作用,在完成任务过程中, 我们不断相互帮助、互相学习,是任务顺利进展,每个人都有所提高,感谢老师 的帮助,感谢这次实训的机会。
【单片机实训心得体会】单片机实训报告一周的实训,让我们从另一个角度去发现单片机。期间我学会了很多宝贵 的知识和经验,在这次单片机实训中我们巩固了我们平时所学的内容;加深了 对各种调试和仿真软件的使用技能;掌握了单片机应用电路的设计和调试方法。首先,我们要从所给定的元器件中设计出 6 个不同的电路,并编写程序实 现相关任务要求。我们小组设计出的电路主有(1)数码管轮流显示百十个位的数。要求:数据来源于拨码开关;个位显 示完毕停留的时间稍微长些。(2)定时计数器实现对外部脉冲计数 5 次后,流水灯的状态由亮点左流动 转化成闪烁 5 次,然后回到初始状态。(3)单键改变流水灯状态。按键一旦按下,流水灯状态由暗点右流动转化 成闪烁 8 次,然后回到初始状态。(4)双键改变流水灯状态。按键 K0(连接 INT0)按下,流水灯状态由亮点 左流动,转化成闪烁 5 次,然后回到初始状态;按键 K1(连接 INT1)按下,流水 灯状态由亮点左流动,转化成暗点右流动至最右端,然后回到初始状态;并且 按键 K1 级别高于 K0。(5)串口输出数据,实现在 2 个数码管上显示 60 秒计数器。(6)在集成的 8 位数码管上动态显示出:1――8 的效果。其次,我们要对我们所设计的电路进行电路布局、连线,检查电路是否出 现错误或者遗漏。然后,学会用 KEIL 软件调试程序,并用该软件菜单的各项调试工具和窗口。再结合硬件和软件,进行整体调试。最后,当我们根据相关要求从所给定的元器件中设计出 6 个不同的电路、 编写程序、线路布局,调试成功,我们的设计就完成了。在这实训期间我深刻的认识到了理论知识和实践操作必须是相结合的,也 许在实训时会有很多各种软、硬件等故障。在编程时我们就出现了很大的障碍, 本来还以为编程会很简单的,等到实际 操作起来才知道它的复杂性,没有想像中的那么得心应手, 最后不得不求出其他 小组,原来本身程序的思维是正确的,只是步骤中有点小错误,所以导致整个程 序的结果很乱。我们在做双键改变流水灯状态的电路时又发现了一个头痛的问题,发光二 极管不亮、开关不管用,刚开始的时候,我们检查了好几遍就是没有发现问题, 快要失去耐心是发现少两连接了两根线,这是个好现象让我们有了继续往下的 勇气,终于在反复的检查研究中,我们发现发光二极管不亮的正负方向反了, 开关接错了位Z,这才导致连接线路期间的错误不断。结果是可喜的,在我们 小组竭尽全力,同学老师的帮忙下,我们的电路很成功。 我们会遇到很多挫折,不要气馁,不要放弃。我们只有这样才能提高自己 的实际操作能力;培养自己独立思考能力;树立良好的心理素质和吃苦耐劳精 神。因此,本实训对培养学生正确的劳动观念、组织纪律性、团队合作精神
【单片机实训心得体会】专业综合1(2)专业班级专业班级电子信息工程 0801 学生学号学生学号 学生姓名学生姓名吴锦 指导 指导教师:张云、包长春、马崇霄、杜殿会 时间实习时间:― 时间机 电 工 程 学 院 一、实习目的和意义1、实习目的实习目的(1)利用单片机小系统实习板,掌握电路原理图; (2)通过对系统板的测试,了解系统板的工作原理及性能,掌握元器件及系统 故障的排除方法; (3)通过单片机系统的调试、程序编制及运行,掌握单片机系统的工作原理、 开发方法和操作方法。2、实习意义实习意义通过本实习不但可以掌握单片机软、硬件的综合调试方法,而且可以熟练掌 握电路原理图,激发对单片机智能性的探索精神,提高学生的综合素质,培养学 生应用单片机实现对工业控制系统的设计、开发与调试的能力。在制作学习过程 中,不但可以掌握软、硬件的综合调试方法,而且可以使学生对单片机智能性产 生强烈的欲望。达到最大限度地掌握微机应用技术,软件及接口设计和数据采集 与处理的技能,培养电综合实践素质的目的。二、实习内容1.熟悉“单片机课程实习”电路板,领会、掌握该电路板的设计原理及硬件布局。2.掌握单片机技术应用平台keil软件的学习。3.借助平台软件,学习开发板的使用,按照要求编制、调试出正确的汇编语言程序。4.学习适合本开发平台软件STC-ISP的在线单片机烧录。5.针对实习电路板的功能,编制、调试、编译汇编语言程序,下载烧录并在实验板上运行, 或利用软件ISIS 7 Professional进行软件仿真。实现的功能实现的功能1.led显示模块:单向循环流水led显示、双向循环流水led显示、花样流水灯的 显示,使用查表方法编制任意点亮历程的实现,使用软件延时; 2.数码管显示模块:一位静态数码管显示0到9和0到F、二位静态数码管显示0到 99、三位静态数码管显示0到999、四位静态数码管显示0到9999;阴极和阳极四 位动态数码管显示;74LS驱动4位静态数码管显示;利用74HC595四位静态数码管 显示;使用串行静态显示和动态扫描显示两种方式; 3.键盘模块:利用4×4矩阵键盘按键对应置数显示“0~F”;使用键盘的行列扫 描方式; 三、硬件介绍(一)LED显示模块:C219 30pFU1XTAL1X1 C1CRYSTAL18XTAL29RSTP0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17C3 R11k 1uF29 30 31 30pF 1 2 3 4 5 6 7 8PSEN ALE EAR251kP1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51D7LED-REDD6LED-REDD5LED-REDD4LED-REDD3LED-REDD2LED-REDD1LED-REDD0LED-RED图1C130p流水灯显示X1 C230p CRYSTAL VCCU119 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17D1 D2 D3 D4 D5 D6 D7 D8LED-REDR3 R4 200 R520018XTAL2C31uFLED-GREEN9RSTR21kLED-REDR 30 31PSEN ALE EALED-REDR7200LED-REDR 4 5 6 7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51LED-REDR9 R10200LED-RED200 LED-RED图2键盘控制循环灯 (二)数码管显示模块:R10 R5 R7 R9 R4 R3 R6 R810k 10k 10k 10k 10k 10k 10k 10kC219 30pFU1XTAL1X1 C1CRYSTAL18XTAL29RSTP0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17C3 R11k 1uF29 30 31 30pF 1 2 3 4 5 6 7 8PSEN ALE EAR251kP1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51图31 位静态数码管显示VCCVCCC219 30pFR10 R5 R7 R9 R14 R11 R18 R21 R23 R25 R34 R27 R30 R4 R3 R6 R8 R13 R15 R17 R20 R24 R12 R16 R22 R19 R26 R33 R28 R31 R32 R29 U1XTAL1 10k 10k 10k 10k 10k 10k 10k 10k P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10k 10kX1CRYSTAL18XTAL29RSTC3 R11k 1uF29 30 31PSEN ALE EAR251k 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51图44 位静态数码管显示 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7P2.3 P2.2 P2.1 P2.0VCCC1 U130PF 19 1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RXD TXD INT0 INT1 T0 T1 WR RD P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 2 3 4 5 6 7 8 9 XTAL1RP1X1 C230PF VCC CRYSTAL 18XTAL2C39 10u RSTRESPACK-8R110k VCC 29 30 31 PSEN ALE EAP1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.71 2 3 4 5 6 7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51图54 位动态数码管显示VCCRP1 U119 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 D0 D1 D2 D3 D4 D5 D6 D7 1 2 3 4 5 6 7 8 9 RESPACK-8D0 D1 D2 D3 D4 D5 D6 D7WE1 WE2 WE3 WE4 WE5 WE6a b c d e f g hU22 3 4 5 6 7 8 9 D0 D1 D2 D3 D4 D5 D6 D7 LE OE 74HC573 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 19 18 17 16 15 14 13 12 a b c d e f g h18XTAL2DULA11 19RSTU3D0 D1 D2 D3 D4 D5 D6 D7 WELA T0 T1 WR RD T1 2 3 4 5 6 7 8 9 11 1 D0 D1 D2 D3 D4 D5 D6 D7 LE OE 74HC573 WR Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 19 18 17 16 15 14 13 12 WE1 WE2 WE3 WE4 WE5 WE629 30 31PSEN ALE EADULA WELA1 2 3 4 5 6 7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51T0RD图6独立键盘加减清零数码管显示 LS164 SRG8U374LSD SRG8 1D 74LS164 SRG8 916 15 14 13 12 11 10 93U574LS/-&C1/-&SRG8C1/-&RRRC1/-& 8&&&&2 182 182 1899RXDTXDC1 U130PF 19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RXD TXD INT0 INT1 T0 T1 WR RDVCCRP11 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 2 3 4 5 6 7 8 9 RESPACK-8X1 C230PF VCC CRYSTAL 18XTAL2C39 RSTR110k10uVCC29 30 31PSEN ALE EAP1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.71 2 3 4 5 6 7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51图74 位 74LS 驱动静态数码管显示16 15 14 13 12 11 10 916 15 14 13 12 11 10 9RN110kRN210k16 15 14 13 12 11 10 9RN310k9RN410k1 2 3 4 5 6 7 81 2 3 4 5 6 7 81 2 3 4 5 6 7 89 7 6 5 4 3 2 1 159 7 6 5 4 3 2 1 159 7 6 5 4 3 2 1 15Q7' Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0Q7' Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0Q7' Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q074HC5HC595Q7' Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0U2U3U49 7 6 5 4 3 2 1 151 2 3 4 5 6 7 8U574HC595DS SH_CPDS SH_CPDS SH_CP13 3 3 3 RXDTXDC130pFX1CRYSTALU119 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 P0.0 38 P0.1 37 P0.2 36 P0.3 35 P0.4 34 P0.5 33 P0.6 32 P0.7 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RXD TXD INT0 INT1 T0 T1 WR RDC2 C330pF 10u18XTAL2RP11 P0.0 2 P0.1 3 P0.2 4 P0.3 5 P0.4 6 P0.5 7 P0.6 8 P0.7 9 RESPACK-89RSTR110k29 30 31PSEN ALE EAP1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51图84 位 74HC595 静态显示14 11DS SH_CPST_CPST_CPST_CPST_CPOE MROE MROE MROE MR2 1R VCC C119 1nF CRYSTALU1XTAL1X1C2GND VCC 1nF18XTAL2C39 100u R1 10k V CC 29 30 31 RSTP0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RXD TXD INT0 INT1 T0 T1 WR RDGNDPSEN ALE EAVCCP1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.71 2 3 4 5 6 7 8P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51R3 R5 R7 R9 R4 R6 R8 Rk 10k 10k 10k 10k 10k P 0 .0 P 0 .1 P 0 .2 P 0 .3 P 0 .4 P 0 .5 P 0 .6 P 0 .7 P1.0 VCCRP11 P1.1 P0.02 P0.13 P0.24 P0.35 P0.46 P0.57 P0.68 P0.79 RESPACK-8P1.2P1.3 P 1 .7 P 1 .6 P 1 .5 P 1 .4图90 到 F 矩阵键盘四、软件程序流程图 1、流水灯循环左移右移程序框图:开始运行主程序给 P1 口赋初 值 80HA 循环左移,并在 P1 口输 出否调用延时程序判别 A 与 80H 是否相等是 A 循环右移,并在 P1 口输出是否调用延时程 序判别 A 与 01H 是否 相等结束 2、0 到 F 一位静态显示程序框图:开始3、0 到 9 一位静态显示程序框图:开始1.建 0―F 的字形码表 2.用累加器 A 控制 P0 口并传递参数 3.R0 记录目前显示的字型码(P0)=0A=P0查字型码表,R0=0 A=R0取得段驱动码查字型码表,显示 0段驱动码送 P0 口延时 延时 (R0)+1 INC R0 R0=10? 是 R0=16? 否 继续查表,显示下一个字型 R0=0 Y N延时 4、动态数码显示程序框图:开始P0 口,P2 口初始化置相应的使能位查表显示延时 N 显示完 Y 置使能位处值返回5、4×4 矩阵矩阵键盘数码显示程序框图主程序图:开始扫描N 是否有键按下Y Y 识别是哪一个键按下通过 P0 口查询显示该序号 判别是否有键按下程序:开始P1=FFH,P1.0=0P1=FFH,P1.2=0有键按下吗?有键按下吗?延时去抖动延时 10ms真的有键按 下?真的有键按 下?根据当前状态识别按键根据当前状态识别按键P1=FFH,P1.1=0P1=FFH,P1.3=0有键按下吗?有键按下吗?延时 10ms延时 10ms真的有键按下 吗?真的有键按下 吗?根据当前状态识别按键根据当前状态识别按键 实习的心得体会 五、 实习的心得体会回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论 到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这 一章节的知识点有了深刻的认识, 而且对这学期开设的单片机这门课程有了更全 面的了解,尤其是在学习使用 proteus 软件片编程和仿真时收获良多。通过这次 单片机课程设计,还使我懂得了实践的重要性。同时在程序调试的过程中提高自 己的发现问题、解决问题、实际动手和独立思考的能力。本次单片机实习我们一共完成了三个模块的程序设计, 包括显示模块、 led 数码管显示模块和键盘模块。分别实现了流水灯的循环点亮控制、数码管的静态 和动态计数显示,还有矩阵键盘按键控制数码管显示的程序设计。然后我们分别 用 protues 系统仿真软件对各个模块进行了模拟仿真,用 keil 软件编制了汇编 语言程序,验证了我们所设计的程序。当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线, 由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设 是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得 体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这 次实习所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识 到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困 难的勇气,就没有什么办不到的。通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应 用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜 自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成 为真己的东西。这次课程设计能顺利的完成,除了我们的努力外,当然也离不开指导老师申 老师的辛勤指导,致使我在设计的过程中学到了很多实用性的知识。同时,对给 过我帮助的所有同学和各位指导老师表示忠心的感谢! 附录附录:程序清单口闪亮P1 口闪亮:ORG 0000H LOOP:MOV P1,#01H ACALL DELAY MOV P1,#00H ACALL DELAY SJMP LOOP DELAY:MOV R7,#250 DEL1:MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL1 RET END 流水灯循环左移右移 左移右移流水灯循环左移右移方法一:ORG 0000H MOV A,#01H LOOPMOV P1,A MOV R5,#10 LOOP1:ACALL DELAY DJNZ R5,LOOP1 RL A JB ACC.7, LOOP2 SJMP LOOP LOOP2:MOV P1,A MOV R5,#10 LOOP3:ACALL DELAY DJNZ R5,LOOP3 RR A JB ACC.0,LOOP SJMP LOOP2 DELAY:MOV R7,#250 DEL1:MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL1 RET END 方法二:ORG 0000H MOV A,#80H LOOP:RL A MOV P1,A ACALL DELAY CJNE A,#80H,LOOP LOOP1:RR A MOV P1,AACALL DELAY CJNE A,#01H,LOOP1 SJMP LOOP DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 方法三:ORG 0000H MOV A,#80H MOV R0,#08H LOOP:RL A MOV P1,A ACALL DELAY DJNZ R0,LOOP MOV R0,#07H LOOP1:RR A MOV P1,A ACALL DELAY DJNZ R0,LOOP1 MOV R0,#07H SJMP LOOP DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 方法四:ORG 0000H MOV A,#00H SETB CY LOOP:RLC A JC LOOP1 MOV P1,A ACALL DELAY SJMP LOOP LOOP1:RRC A JC LOOP MOV P1,A ACALL DELAY SJMP LOOP1 DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 从中间向两边, 从中间向两边, 再 从两边向中间循环 点亮点亮ORG 0000H STAR:MOV R0,#00H MOV R1,#07 MOV A,R0 MOV DPTR,#TAB LOOPMOVC A,@A+DPTR MOV P1,A MOV R5,#10 LOOP1:ACALL DEL DJNZ R5,LOOP1 INC R0 MOV A,R0 DJNZ R1,LOOP SJMP STAR DEL:MOV R7,#200 DEL1:MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL1 RET TAB:DB 18H,24H,42H,81H,42H,24H,18H END 键盘控制流水灯循环点亮键盘控制流水灯循环点亮ORG 0000H AJMP MAIN ORG 0003H AJMP ET ORG 0030H MAIN:MOV SP,#60H SETB EA SETB IT0 SETB EX0 CLR CMOV A,#0FFH MOV P2,A LCALL DEL LOOP:JNB 21H.1,L ;检测标志 RRC A ;右移动 MOV P2,A AJMP DEE LRLC A ;左移动 MOV P2,A DEELCALL DEL AJMP LOOP ETCLR EA PUSH ACC PUSH PSW LCALL DELAY MOV A,#0FFH MOV P1,A NOP NOP MOV A,P1 ;读键值 ANL A,#0F0H CJNE A,#0F0H,NEXT1 AJMP NEXT NEXT1:JB ACC.5,NEXT2 CLR 21H.1 ;按键后产生标志 AJMP NEXT NEXT2:JB ACC.6,NEXT SETB 21H.1 ;按键后产生标志 NEXTSETB EA POP PSW POP ACC HHHRETI DEL:MOV R6,#250 DEL11:MOV R5,#250 DJNZ R5,$ DJNZ R6,DEL11 RET DELAY:MOV R6,#10 DEL1MOV R5,#200 DEL2DJNZ R5,$ DJNZ R6,DEL1 RET END 花样流水灯花样流水灯: ORG 0000H START:MOV R0,#00H MOV P1,#00H LOOP:MOV A,R0 ADD A,#0CH MOVC A,@A+PC CJNE A,#01H,XSH SJMP START XSH:MOV P1,A ACALL DELAY INC R0 SJMP LOOP DB0FFH,00H,0FFH,00H,0FFH,00H,0FF H,00H,0FH,0F0H,0FH,0F0H,0FH,0F0H ,0FH DB0F0H,0FH,0F0H,0AAH,55H,0AAH,55 H,0AAH,55H,0AAH,55H,0AAH,55H,81H ,42H DB24H,18H,24H,42H,81H,42H,24H,18 H,24H,42H,81H,42H,24H,18H,24H,42 H,81H DB42H,24H,18H,24H,42H,81H,03H,06 H,0CH,18H,30H,60H,0C0H,60H,30H,1 8H,0CH DB06H,03H,06H,0CH,18H,30H,60H,0C 0H,60H,30H,18H,0CH,06H,03H,01H DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 位静态数码显示1 位静态数码显示ORG 0000H MOV R0,#0FFH DISPLYINC R0 CJNE R0,#0AH,DISPLY1 MOV R0,#0FFH SJMP DISPLY DISPLY1:MOV A,R0 ADD A,#06H MOVC A,@A+PCMOV P0,A ACALL DELAY SJMP DISPLY DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,9 2H,82H,0F8H,80H,90H DB88H,83H,0C6H,0A1H,86H,8EH,0FFH ,0CH,89H,7FH,0BFH DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET 位静态数码显示2 位静态数码显示ORG 0000H MOV R0,#0FFH MOV R1,#00H DISPLYINC R0 CJNE R0,#0AH,DISPLY1 INC R1 CJNE R1,#0AH,DISPLY2 MOV R0,#0FFH MOV R1,#00H MOV P0,#0FFH AJMP DISPLY DISPLY2:MOV A,R1 ADD A,#10H MOVC A,@A+PC MOV P0,A MOV R0,#0FFH AJMP DISPLY DISPLY1:MOV A,R0 ADD A,#06H MOVC A,@A+PC MOV P2,A ACALL DELAY AJMP DISPLY DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0 CH,89H,7FH,0BFH DELAY:MOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 位静态数码显示3 位静态数码显示ORG 0000H STARTMOV R0,#0FFH MOV R1,#00H MOV R2,#00H MOV P3,#0FFH MOV P2,#0FFH MOV P0,#0FFH DISPLYINC R0 CJNE R0,#0AH,DISPLY1 MOV R0,#0FFH INC R1 CJNE R1,#0AH,DISPLY2 MOV R1,#00H MOV P2,#0C0H INC R2 CJNE R2,#0AH,DISPLY3 SJMP START DISPLY3:MOV A,R2 ADD A,#16H MOVC A,@A+PC MOV P0,A SJMP DISPLY DISPLY2:MOV A,R1 ADD A,#0EH MOVC A,@A+PC MOV P2,A SJMP DISPLY DISPLY1:MOV A,R0 ADD A,#06H MOVC A,@A+PC MOV P3,A ACALL DELAY SJMP DISPLY DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,9 2H,82H,0F8H,80H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH ,0CH,89H,7FH,0BFH DELAYMOV R7,#0FFH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 位静态数码显示4 位静态数码显示ORG 0000H STARTMOV R0,#0FFH MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV P1,#0FFH MOV P3,#0FFH MOV P2,#0FFH MOV P0,#0FFH DISPLYINC R0 CJNE R0,#0AH,DISPLY1 MOV R0,#0FFH INC R1 CJNE R1,#0AH,DISPLY2 MOV R1,#00H MOV P3,#0C0H INC R2 CJNE R2,#0AH,DISPLY3 MOV R2,#00H MOV P2,#0C0H INC R3 CJNE R3,#0AH,DISPLY4 SJMP START DISPLY4:MOV A,R3 ADD A,#1EH MOVC A,@A+PC MOV P0,A SJMP DISPLY DISPLY3:MOV A,R2 ADD A,#16H MOVC A,@A+PC MOV P2,A SJMP DISPLY DISPLY2:MOV A,R1 ADD A,#0EH MOVC A,@A+PC MOV P3,A SJMP DISPLY DISPLY1:MOV A,R0 ADD A,#06H MOVC A,@A+PC MOV P1,A ACALL DELAY SJMP DISPLY DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0 CH,89H,7FH,0BFH DELAYMOV R7,#0AH DELAY1:MOV R6,#0FFH DELAY2:MOV R5,#03H DELAY3:DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 四位稳定显示74HC595 四位稳定显示1)最大数为 9999 的计数器 ORG 0000H AJMP MAIN ORG 000BH AJMP CRT0 ORG 0020H MAIN:MOV R1,#33H MOV R2,#04H CLEAR:MOV @R1,#33H DEC R1 DJNZ R2,CLEAR MOV SP,#60H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0MOV R7,#1 MOV DPTR,#DTAB LOOPMOV R1,#33H MOV R2,#04H MOV R3,#08H MOV R4,#01H LOOP1:MOV A,R3 MOV P2,A RR A MOV R3,A MOV A,@R1 CJNE R4,#00H,MODE XSHLCALL DIS LCALL DEL DEC R1 DJNZ R2,LOOP1 AJMP LOOP MODECJNE A,#00H,FH MOV R4,#01H MOV A,#0AH SJMP XSH FHMOV R4,#00H SJMP XSH CRT0DJNZ R7,RRR MOV R7,#1 INC 30H MOV R0,30H CJNE R0,#0AH,RRR MOV 30H,#00H INC 31H MOV R0,31H CJNE R0,#0AH,RRR MOV 31H,#00H INC 32H MOV R0,32H CJNE R0,#0AH,RRR MOV 32H,#00H INC 33H MOV R0,33H CJNE R0,#0AH,RRR MOV 33H,#00H RRRMOV TH0,#3CH MOV TL0,#0B0H RETI DIS:DELDEL1DEL2:MOVC A,@A+DPTR MOV P0,A RET MOV R6,#20 MOV R5,#150 DJNZ R5,$ DJNZ R6,DEL1 RETCRT0:DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H,0FFH DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0 CH,89H,7FH,0BFH END 最高位为零时, 2)最高位为零时,最高位不显示 ORG 0000H AJMP MAIN ORG 000BH AJMP CRT0 ORG 0020H MAINMOV R1,#33H MOV R2,#04H CLEARMOV @R1,#00H DEC R1 DJNZ R2,CLEAR MOV SP,#60H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 MOV R7,#1 MOV DPTR,#DTAB LOOPMOV R1,#33H MOV R2,#04H MOV R3,#08H LOOP1MOV A,R3 MOV P2,A RR A MOV R3,A MOV A,@R1 LCALL DISCON:RRR:DIS:DELDEL1DEL2:LCALL DEL DEC R1 DJNZ R2,LOOP1 AJMP LOOP DJNZ R7, RRR MOV R7,#1 MOV R0,#30H MOV R4,04H INC @R0 CJNE @R0,#0AH,RRR MOV @R0,#00H INC R0 DJNZ R4,CON MOV TH0,#3CH MOV TL0,#0B0H RETI MOVC A,@A+DPTR MOV P0,A RET MOV R6,#20 MOV R5,#150 DJNZ R5,$ DJNZ R6,DEL1 RETDTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H,0FFH DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0 CH,89H,7FH,0BFH END 3)最大数为 256 的计数器 DAT DATA 30H BW DATA 31H SHW DATA 32H GW DATA 33H ORG 0000H AJMP MAIN ORG 000BH AJMP COUNT ORG 0030H MAINMOV SP,#60H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 MOV R7,#2 MOV DAT,#00H LOOPLCALL CHANGE MOV P2,#01H MOV A,GW LCALL DIS LCALL DEL MOV P2,#02H MOV A,SHW LCALL DIS LCALL DEL MOV P2,#04H MOV A,BW LCALL DIS LCALL DEL MOV P2,#08H MOV A ,#0AH LCALL DIS LCALL DEL AJMP LOOP COUNTDJNZ R7,RRR MOV R7,#2 INC DAT RRRMOV TH0,#3CH MOV TL0,#0B0H RETI CHANGEMOV A,DAT MOV B,#100 DIV AB MOV BW,A MOV A,#10 XCH A,B DIV AB MOV SHW,A MOV GW,B RET DISMOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A RETDELDEL1DEL2:MOV R6,#20 MOV R5,#150 DJNZ R5,$ DJNZ R6,DEL1 RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H,0FFH END 位静态数码显示74LS4 位静态数码显示方法一:ORG 0000H MOV R3,#04H MOV R0,#20H START:LCALL DISPLAY LCALL COUNT LCALL DELAY SJMP START COUNT:INC @R0 CJNE @R0,#0AH,DON MOV @R0,#00H SHWINC R0 INC @R0 CJNE @R0,#0AH,DE1 MOV @R0,#00HBWINC R0 INC @R0 CJNE @R0,#0AH,DE2 MOV @R0,#00H QWINC R0 INC @R0 CJNE @R0,#0AH,DE3 MOV @R0,#00H DE3DEC R0 DE2DEC R0 DE1DEC R0 DONRET DISPLAY:MOV SCON,#00H LOOP:MOV A,@R0 ADD A,#0FH MOVC A,@A+PC MOV SBUF,A JNB TI,$ CLR TI INC R0 DJNZ R3,LOOP MOV R3,#04H MOV R0,#20H DON1:RET DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH DB77H,7CH,39H,5EH,79H,71H,00H,0F 3H,76H,80H,40H DELAY:MOV R7,#50 DELAY1:MOV R6,#100 DELAY2:MOV R5,#20 DJNZ R5,$ DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END 方法二:ORG 0000H AJMP MAIN ORG 000BH AJMP COUNT ORG 0020H MAINMOV R1,#30H MOV R2,#04H CLEAR:MOV @R1,#00H INC R1 DJNZ R2,CLEAR MOV SP,#60H MOV TMOD,#01H MOV TH0,#0B0H SETB EA SETB ET0 SETB TR0 MOV R3,#3 MOV DPTR,#DTAB MOV SCON,#00H DISPLY:MOV R1,#30H MOV R2,#04H LOOP:MOV A,@R1 MOVC A,@A+DPTR MOV SBUF,A JNB TI,$ CLR TI INC R1 DJNZ R2,LOOPACALL DEL SJMP LOOP COUNT:DJNZ R3,RRR MOV R3,#3 MOV R0,#30H MOV R4,#04H CON:INC @R0 CJNE @R0,#0AH,RRR MOV @R0,#00H INC R0 DJNZ R4,CON RRR:MOV TH0,#3CH MOV TL0,#0B0H RETI DEL:MOV R6,#250 DEL1:MOV R5,#250 DEL2:DJNZ R5,$ DJNZ R6,DEL1 RET DTAB:DB3FH,06H,5BH,4FH,66H,6DH,7 DH,07H,7FH,6FH DB77H,7CH,39H,5EH,79H,71H,00H,0F 3H,76H,80H,40H END 动态数码显示动态数码显示:ORG 0000H ACALL START START1MOV @R0,#00H INC R0 DJNZ R2,START1 ACALL START2 COUNTCJNE @R0,#0AH,ACALLDIS MOV @R0,#00H INC R0 INC @R0 CJNE R0,#34H,COUNT ACALL START AJMP START1 ACALLDIS:ACALL DISPLAY INC @R0 AJMP COUNT DISPLAYACALL START MOV R4,#01H DISPLAY1:MOV A,@R0 MOV DPTR,#DTAB MOVC A,@A+DPTR MOV P0,A INC R0 MOV A,R3 MOV P2,A RL A MOV R3,A ACALL DELAY DJNZ R2,DISPLAY1 ACALL START DJNZ R4,DISPLAY1 RET DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH DB77H,7CH,39H,5EH,79H,71H,00H,0F 3H,76H,80H,40H START:MOV R3,#0FEH START2:MOV R0,#34H MOV R2,#04H RET DELAY:MOV R7,#088H DEL1:MOV R6,#88H DEL2:MOV R5,#01H DEL3:DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 RET END 独立键盘加减清零数码显示独立键盘加减清零数码显示#include&reg52.h& #define uchar unsigned char #define uint unsigned int sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void delayms(uint); uchar numt0, void display(numdis) {uchar shi, shi=numdis/10; ge=numdis%10; wela=1; P0=0 wela=0; dula=1; P0=table[shi]; dula=0; P0=0 delayms(5); wela=1; P0=0 wela=0; dula=1; P0=table[ge]; dula=0; P0=0 delayms(5);} void delayms(uint x) {uint i,j; for(i=x;i&0;i--) for(j=110;j&0;j--);} void init() {TMOD=0x01; TH0=()/256; TL0=()%256; EA=1; ET0=1;} void keyscan() {if(key1==0) {delayms(10); if(key1==0) {num++; if(num==60) num=0; while(!key1);}} if(key2==0) {delayms(10); if(key2==0) { if(num==0) num=60; num--; while(!key2); }} if(key3==0) {delayms(10); if(key3==0) {num=0; while(!key2);}} if(key4==0) {delayms(10); if(key4==0) { while(!key4); TR0=~TR0;}}} void main() {init(); while(1) {keyscan(); display(num);}} void T0_time() interrupt 1 {TH0=()/256; TL0=()%256; numt0++; if(numt0==20) {numt0=0; num++; if(num==60) num=0;}} 显示矩阵键盘 0 到 F 显示KEY_DATA DATA 30H ORG 0000H MOV KEY_DATA,#10H AJMP MAIN ORG 0030H MAIN:MOV SP,#60H LOOP:LCALL SCAN MOV A,KEY_DATA MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A LCALL DEL AJMP LOOP SCAN:MOV A,#0FHMOV P1,A MOV A,P1 CJNE A,#0FH,KEYSCAN RET KEYSCAN:LCALL DEL MOV R2,#7FH MOV R3,#4 MOV R0,#00H KEYSM1:MOV A,R2 MOV P1,A RR A MOV R2,A MOV A,P1 ANL A,#0FH CJNE A,#0FH,JSADD INC R0 DJNZ R3,KEYSM1 RET JSADDJB ACC.0,JSADD1 MOV A,#0 AJMP JSADD4 JSADD1:JB ACC.1,JSADD2 MOV A,#4 AJMP JSADD4 JSADD2:JB ACC.2,JSADD3 MOV A,#8 AJMP JSADD4 JSADD3:JB ACC.3,JSADD4 MOV A,#12 JSADD4:ADD A,R0 MOV KEY_DATA,A DELMOV R6,#50 DEL1MOV R5,#200 DJNZ R5,$ DJNZ R6,DEL1 RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H, 0F8H,80H,90H DB88H,83H,0C6H,0A1H,86H,8EH,0FFH ,0CH,89H,7FH,0BFH END}

我要回帖

更多关于 单片机累加器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信