单片机实验指导书100710.pdf
《单片机实验指导书100710.pdf》由会员分享,可在线阅读,更多相关《单片机实验指导书100710.pdf(45页珍藏版)》请在三一文库上搜索。
1、电工电子实验 单片机实验指导书单片机实验指导书单片机实验指导书单片机实验指导书 电工电子实验教学中心 2008 年 11 月 1 目目目目录录录录 1.闪烁灯 2.模拟开关灯 3.广告灯的左移右移 4.广告灯(利用取表方式) 5.蜂鸣器报警信号产生 6.按键识别方法之一 7.0099 计数器 8.0059 秒计时器(利用软件延时) 9.动态数码显示技术 10. 44 矩阵式键盘识别技术 11. 定时计数器 T0 作定时应用技术(一) 12. 定时计数器 T0 作定时应用技术(二) 13. 99 秒马表设计 14. “嘀、嘀、”报警声 15. ADC0809 A/D 转换器基本应用技术 16.
2、88LED 点阵显示技术 17. 点阵 LED“09”数字显示技术 18. 附录:TKStudio 集成开发环境使用简介 2 1 1 1 1、闪烁灯、闪烁灯 1 1、实验任务实验任务 8 个发光二极管(L1-L8)不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。 2 2、实验箱上端口地址实验箱上端口地址 发光二极管单元地址:2FFFH 3.3. 程序设计内容程序设计内容 (1)延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间 隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来 达到我们的要求,但这样的延时程序
3、是如何设计呢?下面具体介绍其原理: 石英晶体为 12MHz,因此,1 个机器周期为 1 微秒 机器周期微秒 DELAY: MOV R6,#202 个2 D1:MOV R7,#2482 个22224849820 DJNZ R7,$2 个2248(498 DJNZ R6,D12 个2204010002 因此,上面的延时程序时间为 10.002ms。 由以上可知,当 R610、R7248 时,延时 5ms,R620、R7248 时,延时 10ms,以 此为基本的计时单位。如本实验要求 0.2 秒200ms,10msR5200ms,则 R520,延时 子程序如下: DELAY:MOV R5,#20 D
4、1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2)输出控制 根据发光二极管的单向导电性可知,当给端口 2FFFH 单元输出高电平时,发光二极管 熄灭;当端口 2FFFH 单元输出低电平,发光二极管亮; 5 5、程序框图、程序框图 如图 1.1 所示 6 6、汇编源程序、汇编源程序 ORG 0000h AJMP 0030H ORG 0030H START:MOV DPTR,#2FFFH MOVA,#55H MOVX DPTR,A LCALLDELAY CPLA MOVX DPTR,A LCALLDELAY LJM
5、PSTART DELAY:MOV R5,#20;显示0.2 秒 D1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 3 图 1.1 2 2 2 2、模拟开关灯、模拟开关灯 1 1、实验任务、实验任务 监视开关 Ki(i=1,2,8)的状态,用发光二极管 Li 显示开关状态,如果开关 Ki 按下,对 应 Li 亮,开关不按,Li 熄灭。 2 2、实验箱上端口地址实验箱上端口地址 将 8 路按键开关的状态送到八路发光二极管指示模块 8 路按键开关地址:3FFFFH 发光二极管单元地址:2FFFH 3 3、程序设计
6、内容、程序设计内容 (1)开关状态的检测过程 单片机对开关状态的检测相对于单片机来说,是从单片机 3FFFFH 端口输入信号, 而 输入的信号只有高电平和低电平两种, 当按键开关 K1 不按时, 输入高电平, 相当开关断开, 当按键开关 K1 按下去,即输入低电平,相当开关闭合。单片机可以采用 JBBIT,REL 或 者是 JNBBIT,REL 指令来完成对开关状态的检测即可。 (2)输出控制 当 2FFFH 端口输出高电平,根据发光二极管的单向导电性可知,这时对应发光二极管 L 熄灭;当 2FFFH 端口输出低电平,对应发光二极管 L 亮。 4 4、程序框图、程序框图见图 2. 1 5 5、
7、汇编源程序、汇编源程序 ORG 0000H AJMP 0030H ORG 0030H START:MOV DPTR,#3FFFH MOVX A,DPTR MOV DPTR,#2FFFH MOVX DPTR,A LJMPSTART 开始 输出 55H, Li 熄灭,Lj 亮 (i 表示奇数,j 表示偶数) 延时 0.2 秒 55H 求反输出,Li 亮,Lj 熄灭 (i 表示奇数,j 表示偶数) 延时 0.2 秒 4 END 图 2. 1 3 3 3 3、广告灯的左移右移、广告灯的左移右移 1 1、实验任务、实验任务 做单一灯的左移右移,八个发光二极管 L1L8 分重复循环。 2 2、实验箱上端口
8、地址实验箱上端口地址 发光二极管单元地址:2FFFH 3 3、程序设计内容、程序设计内容 只要给累加器值或常数值, 然后执行MOV DPTR,#2FFFHMOVX DPTR,A的指令, 即可 达到输出控制的动作。 使用RLC A,RRCA 实现左移和右移。 每次送出的数据是不同,具体的数据如下表 1 所示 4 4、程序框图、程序框图 L8L7L6L5L4L3L2L1 11111110 11111101 11111011 11110111 11101111 11011111 10111111 01111111 (表中数据为 0 时,灯亮,为 1 时,灯灭) 5 5、汇编源程序、汇编源程序 ORG
9、 0000H AJMP START ORG 0030H START:MOV R2,#8 MOVA,#0FEH SETB C LOOP:MOV DPTR,#2FFFH MOVX DPTR,A LCALL DELAY RLCA DJNZ R2,LOOP N Y 开 始 Li亮 开关 ki 按下了吗? (i=1,2,8) Li 灭 5 MOV R2,#8 RRCA LOOP1:MOV DPTR,#2FFFH MOVX DPTR,A LCALL DELAY RRCA DJNZ R2,LOOP1 LJMPSTART DELAY:MOV R5,#20;延时 0.2S D1:MOV R6,#20 D2:MO
10、V R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 4 4 4 4、广告灯(利用取表方式)、广告灯(利用取表方式) 1 1、实验任务、实验任务 利用取表的方法, 使 L1-L8 变化: 左移 2 次, 右移 2 次, 闪烁 2 次 (延时的时间 0.2 秒) 。 2 2、实验箱上端口地址实验箱上端口地址 发光二极管单元地址:2FFFH 3 3、程序设计内容、程序设计内容 在用表格进行程序设计的时候,要用以下的指令来完成 (1)利用 MOVDPTR,DATA16 的指令来使数据指针寄存器指到表的开头。 (2)利用 MOVCA,ADPTR 的指令,根
11、据累加器的值再加上 DPTR 的值,就可以使 程序计数器 PC 指到表格内所要取出的数据。 因此,只要把控制码建成一个表,而利用 MOVCA,ADPTR 做取码的操作,就 可方便地处理一些复杂的控制动作,取表过程如下图所示: 4 4、程序框图、程序框图 图 4.1 5 5、汇编源程序、汇编源程序 ORG 0000H AJMPSTART ORG 0030H START:MOV DPTR,#TABLE LOOP2:CLR A MOVC A,A+DPTR N Y 数 据 指 针 DPTR 指 到 TABLE(表)的开头 根据 DPTR 到表内取码 开 始 将取出的码输出至 2FFFH 取出的码是结
12、束码 (01H) 吗? 将数据指针加 1 6 PUSH DPL PUSH DPH CJNEA,#01H,LOOP1 JMPSTART LOOP1:MOV DPTR,#2FFFH MOVX DPTR,A LCALLDELAY POP DPH POP DPL INC DPTR JMP LOOP2 DELAY:MOV R3,#20 D1:MOV R4,#20 D2:MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET TABLE: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,7FH DB 0FEH,0FDH,0FBH,0
13、F7H DB 0EFH,0DFH,0BFH,7FH DB 7FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 7FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H, 0FFH,00H, 0FFH DB 01H END 5 5 5 5、蜂鸣器报警信号产生、蜂鸣器报警信号产生 1 1 实验任务实验任务 用 P1.4 输出 1KHz 和 100Hz 的音频信号驱动扬声器,作报警信号,要求 1KHz 信号响 4s,100Hz 信号响 1s,交替进行,从按键单元读取开关信号,当开关合上响报警信号,当开 关断开告警信号停止,
14、编出程序。 2 2、实验箱上端口地址实验箱上端口地址 “单片机系统”区域中的 P1.4 端口用导线连接到“音频放大模块”区域中的 蜂鸣器 端口上; 2 2 程序设计内容程序设计内容 100Hz 信号周期为 10ms,信号电平为每 5ms 变反 1 次,1KHz 的信号周期为 1ms,信号 电平每 500us 变反 1 次; 3 3 程序框图程序框图 图 5.1 4 4 汇编源程序汇编源程序 FLAGBIT 00H ORG 0000H AJMP START ORG 0030H START:MOV DPTR,#3FFFH MOVXA,DPTR ANDA,01H JB A,START;=1 转移 J
15、NB FLAG,NEXT;=0 转移 MOV DPTR,#200 DV:CPLP1.4 LCALL DELY500 LCALL DELY500 LCALL DELY500 LCALL DELY500 LCALL DELY500 N Y N N N YY Y 开始 K1 按下了吗? FLAG0 吗? 置 8000 次计数 P1.4 输出取反 延时 500us 计数值计完了吗? FLAG 取反 置 200 次计数 P1.4 输出取反 延时 5ms 计数值计完了吗? FLAG 取反 8 LCALL DELY500 LCALL DELY500 LCALL DELY500 LCALL DELY500 L
16、CALL DELY500 CPLFLAG NEXT:MOV DPTR,#8000 DV1:CPLP1.4 LCALL DELY500 DJNZ R2,DV1 CPLFLAG SJMP START DELY500:MOV R7,#250; 延时 0.5ms LOOP:NOP DJNZ R7,LOOP RET END 6 6 6 6、按键识别方法之一按键识别方法之一 1 1 实验任务实验任务 每次按下一次开关(实验箱按键单元最右边的按键) ,计数值加 1,通过实验箱上发光 二极管单元的右边四个发光二极管显示出其的二进制计数值。 2 2、实验箱上端口地址实验箱上端口地址 发光二极管地址:2FFFH
17、2 2 程序设计方法程序设计方法 作为一个按键从没有按下 到按下以及释放是一个完整 的过程,也就是说,当我们按 下一个按键时,总希望某个命 令只执行一次,而在按键按下 的过程中,不要有干扰进来, 因为,在按下的过程中,图 6.1 一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时 候,要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下, 我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及硬件电路的体 积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法 去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按
18、下的时刻存在着一定 的干扰信号,按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全 过程的信号图如上图所示: 从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时 5ms 以上,从 而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按 下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起 的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别过程。从而提高了系统的可 靠性。 由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命 令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键
19、 释放的过程,显然释放的过程,就是使其恢复成高电平状态。 3 3 3 3程序框图程序框图 9 开始 按键按下了吗 Temp+ 送入发光二极管地址 图 6.1 4 4 C C 语言源程序语言源程序 #include #include #include #define uint unsigned int #define uchar unsigned char uchar temp,temp1,temp2; void delay(uint z); void main(void) temp=0xf0; XBYTE0x2fff=temp; while(1) delay(100); temp1=XBYTE
20、0X3FFF; if(temp1=0xfe) delay(50); temp1=XBYTE0X3FFF; if(temp1=0xfe) temp+; temp2=temp; temp2=temp2|0xf0; XBYTE0x2fff=temp2; void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); 7 7 7 7、0000000099999999 计数器计数器 1 1 实验任务实验任务 利用 AT89S51 单片机来制作一个手动计数器,用实验箱上按键单元的最右边的按键作 为手动计数的按钮,用实验箱数码管显示单元的最右边 2
21、 个数码管显示 0099 的计数计数 值。 2 2、实验箱上端口地址实验箱上端口地址 数码管段码地址:0FFFH 数码管位码地址:1FFFH 按钮地址:3FFFH 2 2 程序设计内容程序设计内容 (1)单片机对按键的识别的过程处理 (2)单片机对正确识别的按键进行计数,计数满时,又从零开始计数; (3)单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们 要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。 如何拆开十位 10 和个位我们可以把所计得的数值对 10 求余,即可个位数字,对 10 整除,即可得到十位数字 了。 (4)通过查表方式,分别显示出个位
22、和十位数字。 3 3 程序框图程序框图 开始 Count 初始为 0 Count+ 按键识别成功 Count=100? 显示 count 数值 图 7.1 4 4 C C 语言源程序语言源程序 #include #include #define uint unsigned int #define uchar unsigned char Ucharcode table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0 x07,0x7f,0x6f; uchar temp; uint count; void delay(uint z); void disp(uchar cou
23、nt) XBYTE0X0FFF=tablecount% 10; XBYTE0X1FFF=0xfe; delay(2); XBYTE0X0FFF=tablecount/1 0; XBYTE0X1FFF=0xfd; delay(2); XBYTE0X1FFF=0xff; void main(void) p14=1; count=0; while(1) disp(count); temp=XBYTE0X3FFF; temp=temp|0xfe; if(temp=0xfe) delay(50); temp=XBYTE0X3FFF; temp=temp|0xfe; if(temp=0xfe) count
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书 100710
链接地址:https://www.31doc.com/p-5180862.html