
第八次课(共2学时)一、授课题目:C51基础知识2和流水灯的设计二、教学目标和任务:1.了解C51的运算符及其用法;2.掌握流水灯硬件电路的设计;3.掌握三种流水灯编程的方法。三、教学重难点:重点:流水灯硬件电路的设计、三种流水灯编程方法。难点:数组方法设计流水灯。四、授课过程:回顾:简要的回顾上一节课的主要知识点,C51在ANSIC基础上新增的关键词、标识符命名规则、变量定义规则、函数定义规则、C51程序框架。0.引入本节课将为同学们介绍C51中主要运算符的使用,之后为同学们介绍流水灯硬件电路的设计和三种编程方法。1.C51运算符1.1算术运算符:+、一、*、/、%、++、--本部分需要强调1. x++和++x 的区别、x=-和--x 的区别。2./和%搭配使用可拆分出一个数的每一位。1.2逻辑运算二&&!1
1 第八次课(共 2 学时) 一、授课题目:C51 基础知识 2 和流水灯的设计 二、教学目标和任务: 1. 了解 C51 的运算符及其用法; 2. 掌握流水灯硬件电路的设计; 3. 掌握三种流水灯编程的方法。 三、教学重难点: 重点:流水灯硬件电路的设计、三种流水灯编程方法。 难点:数组方法设计流水灯。 四、授课过程: 回顾:简要的回顾上一节课的主要知识点,C51 在 ANSI C 基础上新增的关键词、标识符命名规则、变量定义规则、函数 定义规则、C51 程序框架。 0. 引入 本节课将为同学们介绍 C51 中主要运算符的使用,之后为 同学们介绍流水灯硬件电路的设计和三种编程方法。 1. C51 运算符 1.1 算术运算符:+、-、*、/、%、++、- 本部分需要强调 1. x++和++x 的区别、x-和-x 的区别。 2. /和%搭配使用可拆分出一个数的每一位。 1.2 逻辑运算 && || !

注意:逻辑运算的结果只有一位,当操作数不只一位时,非0作1处理。1.3逐位运算&、[、~、、>注意:逐位运算中的&、、和逻辑运算中的&&、山、!和区别。左移一位乘以2,右移一位除以2。1.4关系运算><>=<=!=结果为一位0或者1。注意==和=的区别。2.流水灯硬件电路设计卡U1口XTALT616666 3663666 566316PO.1AGA8十星美复装oXTAL2a+LEDOR910P870LEDYFP2.90日o##集#惠R10BAF###晨健建#五E#REEE会LEDS660图1流水灯硬件电路讲解要点:1.单片机最小系统电路应包含电源(图中省略了)、时钟2
2 注意:逻辑运算的结果只有一位,当操作数不只一位时, 非 0 作 1 处理。 1.3 逐位运算 &、|、~、^、> 注意:逐位运算中的&、|、~和逻辑运算中的&&、||、!和 区别。 左移一位乘以 2,右移一位除以 2。 1.4 关系运算 > = <= == != 结果为一位 0 或者 1。注意==和=的区别。 2. 流水灯硬件电路设计 图 1 流水灯硬件电路 讲解要点: 1. 单片机最小系统电路应包含电源(图中省略了)、时钟

电路(外部振荡时钟)、复位电路(手动复位和按键复位)、EA*接高电平。2.LED灯应该采用灌电流驱动。8只LED灯接在P1口的八只引脚上。3.三种方法设计流水灯3.1一只一只点亮#includesbit LEDO=P1~0;sbit LED1=P1'1; ...voidDelay500msO略)://时延可通过下载程序软件生成,该处为学生讲解如何生成时延函数。voidmainO1while(1)(LEDO=O:Delay500ms0:LEDO0=1:LED1=0:Delay500ms(:LED1=1:寻1该程序的设计思想在于,给P1的某一只引脚低电平,对应的LED灯点亮。最终实现的现象为最上面的两只灯依次交替3
3 电路(外部振荡时钟)、复位电路(手动复位和按键复位)、EA* 接高电平。 2. LED 灯应该采用灌电流驱动。8 只 LED 灯接在 P1 口的 八只引脚上。 3. 三种方法设计流水灯 3.1 一只一只点亮 #include sbit LED0=P1^0; sbit LED1=P1^1; . void Delay500ms(){略};//时延可通过下载程序软件生成,该处 为学生讲解如何生成时延函数。 void main () { while(1) { LED0=0; Delay500ms(); LED0=1;LED1=0; Delay500ms(); LED1=1; } } 该程序的设计思想在于,给 P1 的某一只引脚低电平,对 应的 LED 灯点亮。最终实现的现象为最上面的两只灯依次交替

点亮。3.2移位函数方法库函数intrins中的_crol_(m,n)和_cror_(m,n)可实现将m循环左移(右移)n位。需要将P1数据左移一位时可以写成P1=_crol_(P1, 1) :思考:可否写成crol(P1,1)?为什么?可以通过a+1和a=a+1的区别来理解。程序如下:#include#include//包含移位函数crol()的头文件voiddelay500ms(();voidmain()1P1=0xfe://向P1口送出点亮数据while (1)tdelay500msO :P1= crol_(P1,1)://函数crol_(P1,1)把P1中的数据循环左移1位11注意:_crol(m,n)函数包含在库函数中,需要在源文件前些包含该头文件。4
4 点亮。 3.2 移位函数方法 库函数 intrins 中的_crol_(m,n)和_cror_(m,n)可实现 将 m 循环左移(右移)n 位。 需要将 P1 数据左移一位时可以写成 P1=_crol_(P1,1); 思考:可否写成_crol_(P1,1)?为什么?可以通过 a+1 和 a=a+1 的区别来理解。 程序如下: #include #include //包含移位函数_crol_( )的头文件 void delay500ms(){}; void main( ) { P1=0xfe; //向 P1 口送出点亮数据 while (1) { delay500ms(); P1=_crol_(P1,1) ; // 函数_crol_(P1,1)把 P1 中 的数据循环左移 1 位 } } 注意:_crol_ (m,n)函数包含在库函数中,需要在源 文件前些包含该头文件

思考:请用_crol_(m,n)或者_cror_(m,n)实现从高位到低位每次亮两个的流水灯。思考:<<为补零左移,crol(m,n)为循环左移,若将P1=crol(P1,1)改为P1=P1<<1,现象有什么不同?程序应该怎么写。程序如下:#include<reg51.h)#include<intrins.h)还需要吗?delay500ms0();voidmain()//主程序1P1=0xfe;//向P1口送出点亮数据while (1)tdelay500ms(://P1中的数据补零左移1位P1=P1<<1:if(P1==0)P1=0xfe:11思考:if(P1==0)P1=Oxfe能否删除,为什么?3.3array(数组)制作由上至下再由下至上反复循环点亮显示的流水灯。建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依次送P1口。ucharcodetab[15]=[Oxfe,Oxfd,Oxfb,Oxf7,Oxef,5
5 思考:请用_crol_(m,n)或者_cror_(m,n)实现从高位到低 位每次亮两个的流水灯。 思考: #include 还需要吗? delay500ms(){}; void main( ) //主程序 { P1=0xfe; //向 P1 口送出点亮数据 while (1) { delay500ms(); P1=P1<<1 ; // P1 中的数据补零左移 1 位 if(P1==0) P1=0xfe; } } 思考:if(P1==0) P1=0xfe 能否删除,为什么? 3.3 array(数组) 制作由上至下再由下至上反复循环点亮显示的流水灯 。 建立 1 个字符型数组,将控制 8 个 LED 显示的 8 位数据 作为数组元素,依次送 P1 口。 uchar code tab[15]={ 0xfe,0xfd,0xfb,0xf7,0xef

Oxdf,Oxbf,Ox7f,Ox7f,Oxbf,Oxdf,Oxef,Oxf7,Oxfb,Oxfd,Oxfel ;思考:为何用code?要求同学们掌握数组定义方法:数据类型[存储空间种类]数组名字[元素数目]=[x,x, x, x...1;1、如果数组内容属于定义好了就不再变化时,一般放在code中,节省ram空间。2、假设定义一个inta[5],则各元素分别为a[0],a[1],a[2],a[3],a[4],为何要从0开始数呢,因为从1开始数,第五个为a[5],和数组名字重复了。3、完整的数组定义应包含元素数目n,和各元素取值。4、元素数目可以省略,此时应将每个元素的初始值均列举出来。5、可以不完全定义,只定义前面几个值,后面的值默认为0,例如:inta[5]=(1,3],则a[0]=0,a[1]=3,其余值均为0。6、完全不定义时,所有值均为不确定的值。例题1:请思考如下定义中数组元素个数和初始值。(1) int a[ ]=(1,2,3) ;(2) int a[5]=(1,2,3] :答:(1)a[0]=1;a[1]=2;a[2]=3;(2)a[0]=1;a[1]=2;a[2]=3;a[3]=0;a[4]=0;示例程序如下,可以实现先上到下再下到上的花色显示:6
6 0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xf e}; 思考:为何用 code? 要求同学们掌握数组定义方法: 数据类型 [存储空间种类] 数组名字[元素数目]={x, x,x,x.}; 1、如果数组内容属于定义好了就不再变化时,一般放在 code 中,节省 ram 空间。 2、假设定义一个 int a[5],则各元素分别为 a[0],a[1], a[2],a[3],a[4],为何要从 0 开始数呢,因为从 1 开始数, 第五个为 a[5],和数组名字重复了。 3、完整的数组定义应包含元素数目 n,和各元素取值。 4、元素数目可以省略,此时应将每个元素的初始值均列 举出来。 5、可以不完全定义,只定义前面几个值,后面的值默认 为 0,例如: int a[5]={1,3},则 a[0]=0,a[1]=3,其余值均为 0。 6、完全不定义时,所有值均为不确定的值。 例题 1:请思考如下定义中数组元素个数和初始值。 (1)int a[ ]={1,2,3}; (2)int a[5]={1,2,3}; 答:(1) a[0]=1; a[1]=2; a[2]=3; (2) a[0]=1; a[1]=2; a[2]=3; a[3]=0;a[4]=0; 示例程序如下,可以实现先上到下再下到上的花色显示:

#include#define uchar unsigned charuchar code tab[l=( Oxfe,Oxfd,Oxfb,Oxf7Oxef,Oxdf,Oxbf,Ox7fOx7f,Oxbf,Oxdf,Oxef,Oxf7,Oxfb,Oxfd,Oxfe):/*前8个数据为左移点亮数据,后8个为右移点亮数据*/#includevoiddelay200ms():voidmain(1uchar i;while (1)1for (i=0:i<16: i++)1P1=tab[il://向P1口送出点亮数据delay200ms()://延时,即点亮一段时间111注意:数组方法设计流水灯程序为本节课较难理解的部分,讲解时要注意学生的听课节奏,使同学们充分掌握。五、作业1、点亮P2.0P2.7引脚控制的8只LED,花色如下:7
7 #include #define uchar unsigned char uchar code tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前 8 个数据为左移点亮 数据,后 8 个为右移点亮 数据*/ #include void delay200ms{}; void main( ) { uchar i; while (1) { for(i=0;i<16; i++) { P1=tab[i]; //向 P1 口送出点亮数据 delay200ms(); //延时,即点亮一段时间 } } } 注意:数组方法设计流水灯程序为本节课较难理解的部分, 讲解时要注意学生的听课节奏,使同学们充分掌握。 五、作业 1、点亮 P2.0~P2.7 引脚控制的 8 只 LED,花色如下:

(1)从0到7依次逐个点亮(2)从7到0依次逐个点亮(3)从两边到中间依次逐个点亮(4)从中间到两边依次逐个点亮(5)从0到7依次全点亮(6)从7到0依次全点亮(7)从两边到中间依次全点亮(8)从中间到两边依次全点亮设计硬件编程实现此功能。要求三种方法均要使用。六、参考文献1.丁向荣编,单片机微机原理与接口技术(第2版),北京:电子工业出版社,20182.张毅刚编,单片机原理及应用:C51编程+Proteus仿真(第2版),北京:高等教育出版社,20163.丁元杰编,单片微机原理及应用(第三版),北京:机械工业出版社,2011.4.郭文川编,MCS-51单片机原理接口及应用,北京:电子工业出版社,20135.周航慈编,单片机应用程序设计技术(修订版),北京:北京航天航空大学出版社,20026.严洁编,单片机原理及其接口技术,北京,机械工业出版社,2010.七、课后记1.本节课前半部分复习C51重要运算符、语句和程序框8
8 (1)从 0 到 7 依次逐个点亮 (2)从 7 到 0 依次逐个点亮 (3)从两边到中间依次逐个点亮 (4)从中间到两边依次逐个点亮 (5)从 0 到 7 依次全点亮 (6)从 7 到 0 依次全点亮 (7)从两边到中间依次全点亮 (8)从中间到两边依次全点亮 设计硬件编程实现此功能。要求三种方法均要使用。 六、参考文献 1. 丁向荣编,单片机微机原理与接口技术(第 2 版),北京:电子 工业出版社,2018. 2. 张毅刚编, 单片机原理及应用:C51编程+Proteus仿真(第2版), 北京:高等教育出版社,2016. 3. 丁元杰编,单片微机原理及应用(第三版),北京:机械工业出 版社,2011. 4. 郭文川编,MCS-51 单片机原理接口及应用,北京:电子工业出 版社,2013. 5. 周航慈编, 单片机应用程序设计技术(修订版),北京:北京航 天航空大学出版社,2002. 6. 严洁编, 单片机原理及其接口技术,北京,机械工业出版社, 2010. 七、课后记 1.本节课前半部分复习 C51 重要运算符、语句和程序框

架。后半节课讲解流水灯的实现2.本节课为学生首次接触单片机编程,将重点放在规范框架和语句格式上,选取的例子较为简单3.通过分组讨论的方式,使同学们完全掌握LED灯花色显示。9
9 架。后半节课讲解流水灯的实现。 2.本节课为学生首次接触单片机编程,将重点放在规范框 架和语句格式上,选取的例子较为简单。 3.通过分组讨论的方式,使同学们完全掌握 LED 灯花色显 示