您的当前位置:首页正文

2014-5《单片机原理与应用》实验-指导书

2021-02-13 来源:步旅网


《单片机原理与应用》课程实验指导书

一、实验目的

《单片机原理及应用》课程实验是电子信息工程和电子科学与技术专业的一门专业基础课实验,是学生获得单片机知识的开端。要求学生通过本课程实验,具备利用单片机技术解决实际控制问题的能力。培养与提高学生科学实验的能力,动手实践能力、理论联系实际的能力、自学能力、从简单的设计到综合的应用能力和创新能力。通过实验的训练,使学生掌握《单片机原理与应用》实验的基本方法和基本技能,加深对单片机知识的理解,掌握单片机应用系统设计方法,为今后的工作打下良好的基础。

二、实验设备及器件

PC机 一台 DP-51PROC单片机综合仿真实验仪 一台 示波器 一台 电阻 若干 电容 若干 导线 若干

三、实验内容

本实验共6个实验内容:

实验一 仿真实验仪的操作使用练习 实验二 单片机I/O口控制实验 实验三 蜂鸣器驱动实验 实验四 电子琴实验

实验五、六 直流电机实验(定时器输出PWM实验) 实验七 16×16 LED 扫描输出实验

*详细指导内容请见附录。

四、实验考核、成绩评定

考核方法:设计过程中检查学生实际操作能力,根据课程设计内容要求,设计相关程序,

指导书中所给代码仅供参考,要求学生独立进行整体程序设计,教师要检查学生的运行步骤及结果。

成绩评定:实验成绩根据考勤、实验态度、动手能力、创新能力和实验报告来综合评定,

实验成绩计入课程平时成绩,占总成绩的20%。

五、参考资料

1、DP-51PROC实验指导书(实验设备配套指导资料),2007年. 2、李广第.等单片机基础.北京航空航天大学出版社,2005年. 3、胡汉才等. 单片机原理及其接口技术.清华大学出版社,,2009年.

六、实验报告格式要求

按学院实验报告统一格式 报告内容包括:实验目的与要求、实验步骤、程序流程图和实验程序、实验步骤和实验结论。

附录——详细指导内容

实验一 仿真实验仪的操作使用练习

一.实验目的和要求

熟悉 Keil C51 集成开发环境调试功能的使用和DP-51PROC 单片机综合仿真实验仪的

- 1 -

使用。要求同学熟练掌握结合DP-51PROC 单片机综合仿真实验仪和 Keil C51 集成开发环境进行仿真调试。 二.实验内容

进行Keil C51 集成开发环境的仿真调试练习,按照以下内容建立文件并编译仿真调试。 ORG 0000H LJMP Main ORG 00F0H Main:

MOV R7, #0 Loop:

MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R6, $

DJNZ R7, Loop ;延时 CPL P1.0 ; P 1 .0取反 CPL P1.1 ; P 1 .1 取反 CPL P1.2 ; P 1 .2 取反 CPL P1.3 ; P 1 .3 取反 CPL P1.4 ; P 1 .4 取反 CPL P1.5 ; P 1 .5 取反 CPL P1.6 ; P 1 .6 取反 CPL P1.7 ; P 1 .7 取反 SJMP Main END 三.实验步骤

1.用40 针排线把 DP-51PROC实验仪上的 A1 区 J76 接口和 A2 区 J79 接口相连,然后使用排线把 A2 区的 J61 接口与 D1 区的 J52 接口相连。

图1 实验一原理图

2.对 DP-51PROC 实验仪上电,设置TKSMonitor51 仿真器和使用软DPFLASH 把 MON51 监控程序下载到TKSMonitor51 仿真器。

- 2 -

3.关闭 DPFlash 软件把 TKSMonitor51 仿真器的工作模式选择开关切换到 RUN处,然后按一下复位键(RST),MON51 程序就开始运行了。此时,TKSMonitor51仿真器进入调试状态。

4.如果在退出仿真调试模式后想再次进入仿真调试,可以先按一下 TKSMonitor51 仿真器的复位键(RST)。可以在仿真调试环境下设置断点,单步,全速运行等。在调试过程中可以看见 D1 区的 LED 的亮灭是由用户程序来控制的。 四.实验思考题

如何仿真和调试 C51 程序呢?(学生可以把上面的例子改为 C51 程序然后再编译调试)

实验 二 单片机I/O口控制实验

一.实验目的

利用单片机的P1口作IO口,使学生掌握使用P1口作为输入和输出口。 二.实验内容

1、编写一段程序, 用P1口作为控制端口,使D1区的LED轮流亮.

2、编写一段程序, 用P1.0-P1.6口控制LED, P1.7控制LED的亮和灭。 三.实验要求

学会使用单片机的P1口作IO口.(有精力的同学也可用P3口作IO口来做该实验) 四.实验步骤

1.用40 针排线把 DP-51PROC实验仪上的 A1 区 J76 接口和 A2 区 J79 接口相连,然后使用排线把 A2区的 J61 接口与D1区的J52接口相连。

1、用导线把A2区的J61接口与D1区的J52接口相连。原理如下图所示

图2 实验二原理图

2、先编写一段延时程序。

3、将LED轮流亮的程序编写完整并调试运行。

4、使用导线把A2区的J61接口的P1.0-P1.6与D1区的J52接口的LED1-LED7相连,对 DP-51PROC 实验仪上电,设置TKSMonitor51 仿真器和使用软DPFLASH 把 MON51 监控程序下载到TKSMonitor51 仿真器。关闭 DPFlash 软件把 TKSMonitor51 仿真器的工作模式选择开关切换到 RUN处,然后按一下复位键(RST),MON51 程序就开始运行了。此时,TKSMonitor51仿真器进入调试状态。如果在退出仿真调试模式后想再次进入仿真调试,可以先按一下 TKSMonitor51 仿真器的复位键(RST)。可以在仿真调试环境下设置断点,单步,全速运行等。在调试过程中可以看见 D1 区的 LED 的亮灭是由

- 3 -

用户程序来控制的。另外A2区J61接口的P1.7与D1区的J53的KEY1相连.原理图如图B所示。

5、编写P1.7控制LED的程序,并调试运行。

6、A2区J61接口的P1.7与D1区的J54的SW1相连。然后再运行程序,查看结果。 五.实验参考程序 程序1:

ORG 0000H LJMP Main ORG 0100H Main:

MOV A, #OFFH CLR C MainLoop:

CALL Delay RLC A

MOV P1, A SJMP MainLoop Delay:

MOV R7, #0 Loop:

MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R7, Loop

RET End 程序2:

ORG 0000H LJMP Main ORG 0100H Main:

JB P1.7, SETLED CLRLED:

CLR Pl. 0 CLR Pl. l CLR P1.2 CLR P1.3 CLR P1.4 CLR P1.5 CLR Pl. 6 SJMP Main SETLED:

- 4 -

SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 SETB P1.6 SJMP Main End

六.实验思考题

1.请同学们思考出几个实现以上功能的编程方法。

2.请同学们思考第二个程序中如果使用KEY1作为外部中断控制LED的亮和灭时,

程序应如何修改?

如何仿真和调试 C51 程序呢?(学生可以把上面的例子改为 C51 程序然后再编译调试) 2、编写一段程序, 用P1.0-P1.6口控制LED, P1.7控制LED的亮和灭。 (有精力的同学也可用P3口作IO口来做该实验)

实验三 蜂鸣器驱动实验

一. 实验目的

利用单片机的 P1 口作IO 口,使学生学会蜂鸣器的使用。 二. 实验内容

1. 编写一段程序,用P1.3 口控制(输出3K到4K频率的方波),使B5 区的蜂鸣器发出嘹亮的响声。

2. 按照例程输入一段程序,用P1.3 口控制,使B5 区的蜂鸣器发出“生日快乐”的音乐。

图3 蜂鸣器原理图

三. 实验步骤

1. 使用导线把A2 区的P13 与B5 区的 BUZZ 接线柱相连。 2. 先编写一个延时程序(120~200us)。

3. 再编写一个循环程序,改变P1.3 脚的电平,然后延时。这样,这个循环就使P1.3口输出一个频率为2.5KHz-4KHz 的方波。在DP-51PROC 单片机综合仿真实验仪上运行该程序时,B5 区的蜂鸣器将发出嘹亮的响声。

4. 可按以下参考程序输入,然后运行,蜂鸣器发出“生日快乐”的音乐。 四. 实验参考程序

ORG 0000H

- 5 -

JMP MAIN ORG 000BH JMP INTT0 ORG 0100H MAIN:

MOV SP, #60H

MOV TMOD, #01H ; 初始化定时器及器中断 SETB ET0 ; 开定时器0 中断

SETB EA

SETB TR0 ; 启动定时器0

START0:

SETB P1.3

MOV 30H,#00H NEXT:

MOV A,30H

MOV DPTR,#TABLE ;从TABLE 中读取数据――声响时间 MOVC A,@A+DPTR MOV R2,A JZ ENDD ANL A,#0FH MOV R5,A MOV A,R2 SWAP A

ANL A,#0FH JNZ SING CLR TR0 JMP D1 SING:

DEC A

MOV 22H,A RL A

MOV DPTR,#TABLE1 ;从TALBE1 中读取数据――声调 MOVC A,@A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A

MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 D1:

CALL DELAY ;声音延时

- 6 -

INC 30H JMP NEXT ENDD:

CLR TR0 JMP START0

INTT0: ;定时器0 中断服务程序

PUSH PSW PUSH ACC MOV TL0,20H MOV TH0,21H CPL P1.3 POP ACC POP PSW RETI

DELAY: ;R5的值就是声响持续时间

MOV R7,#02 DELAY0:

MOV R4,#187 DELAY1:

MOV R3,#248 DJNZ R3,$

DJNZ R4,DELAY1 DJNZ R7,DELAY0 DJNZ R5,DELAY RET TABLE:

DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H

DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00H TABLE1:

DW 64260,64400,64524,64580,64684,64777,64820,64898 DW 64968,65030,65058,65110,65157,65178,65217

END

五. 实验思考题

请同学们思考一下,如何通过编写程序来实现其它的音乐。

实验四 电子琴实验

一.实验目的

- 7 -

利用实验仪上提供的按键 K1~K7 作为电子琴按键,控制蜂鸣器发声,使学生了解计算机发声原理,熟悉定时器和键盘扫描电路的工作原理及编程方法。 二.实验内容

1.编写一段程序,用P3.3 口控制(输出7 种音阶标称频率的方波),使B5 区的蜂鸣器发出不同的音调。程序检测按键的状态,当某一键按下时,蜂鸣器发出对应的音调。 2.按照歌曲的音调,使用 D1 区的按键K1~K7,弹奏一首简单的音乐。 三. 实验步骤

1.用导线将 A2 区P3.3 口(INT1)和B5 区的BUZZ 接口相连,然后将D1 区的J53 接口和A2 区的J61 接口一一对应相连。

2.编写按键的动态键盘扫描程序,根据不同音阶的频率编写蜂鸣器的音调控制程序,然后完

成电子琴的主程序设计。

3.调试编写好的程序,使用频率计校准音阶的频率,然后使用键盘演奏一段好听的音乐。 四. 实验参考程序

BUZZ EQU P3.3 ;端口定义

ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0100H

MAIN:MOV SP,#60H ;初始化堆栈指针

MOV P1,#0FFH ;设置P1 口为输入模式

MOV TMOD,#01H ;设置定时器0 为工作模式1 SETB ET0 ;开定时器0 中断 SETB EA ;开总中断 CLR TR0 ;关闭定时器0 START:

MOV R0,P1

CJNE R0,#0FFH,KEY1 ;键盘扫描

CLR TR0 SJMP START

KEY1:

CJNE R0,#0FEH,KEY2 ;K1 键按下 MOV 30H,#0FBH ;设置音阶1 MOV 31H,#0E9H LJMP SET_TIMER

KEY2:

CJNE R0,#0FDH,KEY3;K2 键按下 MOV 30H,#0FCH ;设置音阶2 MOV 31H,#5CH LJMP SET_TIMER

KEY3:

CJNE R0,#0FBH,KEY4;K3 键按下 MOV 30H,#0FCH ;设置音阶3 MOV 31H,#0C1H

- 8 -

LJMP SET_TIMER

KEY4:

CJNE R0,#0F7H,KEY5 ;K4 键按下 MOV 30H,#0FCH ;设置音阶4 MOV 31H,#0EFH LJMP SET_TIMER

KEY5:

CJNE R0,#0EFH,KEY6 ;K5 键按下 MOV 30H,#0FDH ;设置音阶5 MOV 31H,#045H LJMP SET_TIMER

KEY6:

CJNE R0,#0DFH,KEY7;K6 键按下 MOV 30H,#0FDH ;设置音阶6 MOV 31H,#92H LJMP SET_TIMER

KEY7:

CJNE R0,#0BFH,NOKEY;K7 键按下 MOV 30H,#0FDH ;设置音阶7 MOV 31H,#0D6H SET_TIMER: SETB TR0 ;发声

SJMP START

NOKEY:

CLR TR0 ;无键按下

SJMP START

INT_T0: ;T0中断服务程序

MOV TH0,30H ;定时器赋初值

MOV TL0,31H

CPL BUZZ ;输出方波 RETI

; END

实验五 定时器输出PWM实验

一.实验目的和要求

利用定时器控制产生占空比可变的PWM波;要求学生学会使用单片机的定时器产生250Hz的PWM波。 二.实验内容

编写一段程序,用P1.0口输出PWM波,用D1区的按键KEY1和KEY2实现占空比的增

加和降低。用示波器查看P1.0口的输出波形。 三.实验步骤

1. 用导线连接A2区的P11与D1区的KEY1; 2. 用导线连接A2区的P12与D1区的KEY2;3.将示波器的探针连接到A2区的P1.0; 4. 用示波器观测P1.0口的PWM波形。 四.实验参考程序

- 9 -

PWMH DATA 30H

PWM DATA 31H COUNTER DATA 32H TEMP DATA 33H

ORG 0000H AJMP MAIN ORG 000BH AJMP INTT0

ORG MAIN:

MOV MOV MOV MOV MOV MOV MOV SETB SETB SETB KSCAN:

JNB JNB SJMP K1CHECK:

JB SJMP K1HANDLE:

MOV CJNE SJMP K1H0:

MOV INC CJNE CLR SETB SJMP K1H1:

CJNE SETB K1H2:

INC 0100H SP,#60H

PWMH,#02H COUNTER,#01H PWM,#115H TMOD,#02H TL0,#38H TH0,#38H ET0 EA TR0

P1.1,K1CHECK

P1.2,K2CHECK KSCAN

P1.1,K1HANDLE K1HANDLE A,PWMH A,PWM,K1H0 KSCAN A,PWMH

A

A,PWM,K1H1 TR0 P1.0 K1H2

A,#02H,K1H2 TR0 PWMH

- 10 -

SJMP KSCAN

K2CHECK:

JB P1.2,K2,K2HANDLE SJMP K1HANDLE K2HANDLE:

MOV A,PWMH CJNE A,#01H,K2H0 SJMP KSCAN K2H0:

MOV A,PWMH MOV TEMP,PWM DEC A

CJNE A,#01H,K2H1 CLR TR0 CLR P1.0 SJMP K2H2 K2H1:

DEC TEMP

CJNE A,TEMP,K2H2 SETB TR0 K2H2:

DEC PWMH SJMP KSCAN

INTT0:

PUSH PSW PUSH ACC

INC COUNTER MOV A,COUNTER CJNE A,PWMH,INTT01 CLR P1.0 INTT01:

CJNE A,PWM,INTT02 MOV COUNTER,#01H SETB P1.0 INTT02:

POP ACC

POP PSW RETI

;

End

五.实验思考题

请同学思考用其它方式实现定时器产生PWM 波。

- 11 -

实验六 直流电机实验

一.实验目的及实验要求

学会利用 PWM 控制直流电机的转动速度。要求参考实验五的程序,用D1区的按键KEY1 与KEY2 改变PWM 的占空比来控制直流电机的转速。 二.实验内容和实验步骤

PWM 功率驱动电路原理图如下图,学习如何控制直流电机即只要ZDJ_A 的电压比ZDJ_B 的电压高,电机正转;若ZDJ_B的电压比ZDJ_A 高,电机反转。实验步骤如下: 1. 用导线连接A2 区的P11 与D1 区的KEY1; 2. 用导线连接A2 区的P12 与D1 区的KEY2; 3. 用导线连接A2 区的P10 与B10 区的ZDJ_A; 4. B10 区的ZDJ_B 连接到C1 区的GND; 5. 短接B10 区JP18 的电机电源跳线。

图4 直流电机驱动原理图

三. 实验参考程序

可参考实验五的程序。

- 12 -

四. 实验思考题

请编写一段程序实现电机的正、反转。

实验七 16×16 LED 扫描输出实验

一.实验目的

使用学生学会利用单片机的 IO 口进行 LED 点阵的扫描显示。 二.实验内容

编写一段程序,用 P1 口控制 C3 区 4 片 74HC164 进行行列扫描,使 C3 区的 16×16 LED 点阵显示学生指定的汉字。 三.实验步骤

1. 使用导线将 A2 区的 P10~P14 与 C3 区的 L_DAT_H、L_DAT_L、L_CLK、L_OE、L_STR 依次连接。

2. 运行光盘中的程序,显示“感谢您使用 DP-51PROC 单片机综合仿真实验仪!”,先是向左滚动,后是向上滚动。

3. 如果同学希望改变显示的汉字, 可以使用光盘中附带的字模提取软件(Pctolcd2002)提取同学希望显示汉字的字模,字模提取软件的设置为阴码、逐列式、逆向、十六进制、C51 格式自定义,将生成的字模拷贝到程序中所指定的位置插入即可。 四.实验参考程序 #include

typedef unsigned char byte; typedef unsigned int word; sbit datah595=P1^0; sbit datal595=P1^1; sbit clk595=P1^2; sbit oe595=P1^3; sbit str595=P1^4;

word data datah,datal; byte code displaydata[]= {0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, //在以下位置插入字模

0x00,0x04,0x00,0x43,0xFC,0x70,0x14,0x00,0xD4,0x39,0x54,0x41, 0x54,0x41,0xD4,0x49,

0x04,0x50,0x3F,0x42,0xC4,0x41,0x45,0x61,0x36,0x0A,0x04,0x34, 0x00,0x27,0x00,0x00,/*\"感\

0x40,0x00,0x42,0x00,0xCC,0x3F,0x04,0x50,0x00,0x29,0xFC,0x11, 0x56,0x4D,0x55,0x83,

0xFC,0x7F,0x50,0x00,0x90,0x41,0x10,0x80,0xFF,0x7F,0x10,0x00, 0x10,0x00,0x00,0x00,/*\"谢\

0x80,0x00,0x40,0x20,0x30,0x38,0xFC,0x03,0x03,0x38,0x90,0x40, 0x68,0x40,0x06,0x49,

- 13 -

0x04,0x52,0xF4,0x41,0x04,0x40,0x24,0x70,0x44,0x00,0x8C,0x09, 0x04,0x30,0x00,0x00,/*\"您\

0x40,0x00,0x20,0x00,0xF0,0x7F,0x1C,0x00,0x07,0x40,0xF2,0x41, 0x94,0x22,0x94,0x14,

0x94,0x0C,0xFF,0x13,0x94,0x10,0x94,0x30,0x94,0x20,0xF4,0x61, 0x04,0x20,0x00,0x00,/*\"使\

0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x02, 0x22,0x02,0x22,0x02,

0xFE,0xFF,0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82,0xFE,0x7F, 0x00,0x00,0x00,0x00,/*\"用\

0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10, 0xE0,0x0F,0x00,0x00,/*\"D\"*/

0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01, 0xF0,0x00,0x00,0x00,/*\"P\

0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00, 0x80,0x00,0x80,0x00,

0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,/*\"-\

0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11, 0x08,0x0E,0x00,0x00,/*\"5\"*/

0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20, 0x00,0x00,0x00,0x00,/*\"1\

0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01, 0xF0,0x00,0x00,0x00,/*\"P\"*/

0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C, 0x70,0x30,0x00,0x20,/*\"R\

0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10, 0xE0,0x0F,0x00,0x00,/*\"O\"*/

0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10, 0x38,0x08,0x00,0x00,/*\"C\

0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09, 0x2A,0x09,0xF8,0xFF,

0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08, 0x00,0x08,0x00,0x00,/*\"单\

0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01, 0x10,0x01,0x10,0x01,

0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00, 0x10,0x00,0x00,0x00,/*\"片\

0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41, 0x08,0x30,0x00,0x0C,

0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40, 0x00,0x78,0x00,0x00,/*\"机\

0x20,0x22,0x30,0x23,0xA8,0x22,0x67,0x12,0x32,0x12,0x00,0x20, 0x0C,0x11,0x24,0x0D,

- 14 -

0x24,0x41,0x25,0x81,0x26,0x7F,0x24,0x01,0x24,0x05,0x24,0x09, 0x0C,0x31,0x00,0x00,/*\"综\

0x40,0x00,0x40,0x00,0x20,0x00,0x50,0x7E,0x48,0x22,0x44,0x22, 0x42,0x22,0x41,0x22,

0x42,0x22,0x44,0x22,0x68,0x22,0x50,0x7E,0x30,0x00,0x60,0x00, 0x20,0x00,0x00,0x00,/*\"合\

0x40,0x00,0x20,0x00,0x10,0x00,0xEC,0x7F,0x07,0x40,0x0A,0x20, 0x08,0x18,0x08,0x06,

0xF9,0x01,0x8A,0x10,0x8E,0x20,0x88,0x40,0x88,0x20,0xCC,0x1F, 0x88,0x00,0x00,0x00,/*\"仿\

0x00,0x10,0x04,0x90,0x04,0x90,0x04,0x50,0xF4,0x5F,0x54,0x35, 0x5C,0x15,0x57,0x15,

0x54,0x15,0x54,0x35,0x54,0x55,0xF4,0x5F,0x04,0x90,0x06,0x90, 0x04,0x10,0x00,0x00,/*\"真\

0x00,0x00,0x10,0x82,0x0C,0x82,0x04,0x42,0x4C,0x42,0xB4,0x23, 0x94,0x12,0x05,0x0A,

0xF6,0x07,0x04,0x0A,0x04,0x12,0x04,0xE2,0x14,0x42,0x0C,0x02, 0x04,0x02,0x00,0x00,/*\"实\

0x02,0x08,0xFA,0x08,0x82,0x04,0x82,0x24,0xFE,0x40,0x80,0x3F, 0x40,0x22,0x60,0x2C,

0x58,0x21,0x46,0x2E,0x48,0x20,0x50,0x30,0x20,0x2C,0x20,0x23, 0x20,0x20,0x00,0x00,/*\"验\

0x40,0x00,0x20,0x00,0xF0,0xFF,0x0C,0x00,0x03,0x40,0x00,0x40, 0x38,0x20,0xC0,0x10,

0x01,0x0B,0x0E,0x04,0x04,0x0B,0xE0,0x10,0x1C,0x20,0x00,0x60, 0x00,0x20,0x00,0x00,/*\"仪\

0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x5F,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,/*\"!\//至此字模插入结束

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 };

byte *p=&displaydata[0]; byte *q=&displaydata[32]; void delay(word a) {

word b;

for(b=0;bvoid senddata(word datah,datal)

- 15 -

{

byte i=0; word m,n; oe595=0; str595=0;

for(;i<16;i++) {

clk595=0; m=datah; n=~datal; m&=0x8000; n&=0x8000;

datah595=(bit)m; datal595=(bit)n; datah<<=1; datal<<=1; clk595=1; }

str595=1; str595=0; }

void horizontal(byte time,word counth) //水平移动子程序 {

byte x,y; word j,k,z;

for(z=0;zfor(y=0;ydatal=0x0001; for(x=0;x<16;x++) { p+=3;

j=(word)*p; j<<=8; j&=0xff00; p-=1;

k=(word)*p; k&=0x00ff; datah=j|k; if(x) {

datal<<=1; }

- 16 -

//datah=~datah;

senddata(datah,datal); }

p-=32; } p+=2; }

p=&displaydata[0]; oe595=1; }

void vertical(byte a,time,word countv) //垂直移动子程序 {

byte x,y,e,w=0; word j,k,z;

word datah1,datah2; for(z=countv;z>0;z--) {

for(e=0;e<16;e++) {

for(y=0;ydatal=0x0001; for(x=0;x<16;x++) { p+=3;

j=(word)*p; j<<=8; j&=0xff00; p-=1;

k=(word)*p; k&=0x00ff; datah1=j|k; datah1>>=w; q+=3;

j=(word)*q; j<<=8; j&=0xff00; q-=1;

k=(word)*q; k&=0x00ff; datah2=j|k;

datah2<<=(16-w); datah=datah1|datah2; if(x)

- 17 -

{

datal<<=1; }

//datah=~datah;

senddata(datah,datal); }

p-=32;q-=32; w++;

if(w==16) w=0; }

if((a==16)&&(z==2)) { p+=32;q+=16; } else

{ p+=32;q+=32; } }

p=&displaydata[0]; q=&displaydata[32]; oe595=1; }

void main(void) {

byte time=8;

word size=sizeof(displaydata); word countv=((size-2)>>5)-1; word counth=countv<<4;

byte a=(byte)((size-2)%32); if(a==16) {

counth+=8; countv+=1; }

while(1) {

horizontal(time,counth); delay(65535); delay(65535);

vertical(a,time,countv); delay(65535); delay(65535); } }

五.实验思考题

(1) 请同学思考如何改变字体滚动的速度。

(2) 请同学再思考一下,如何实现字体的反白显示。

- 18 -

因篇幅问题不能全部显示,请点此查看更多更全内容