【傻瓜51单片机讲义】第5课 流水灯实验教学
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
星嵌科技
mcustar.taobao.com
学51
3.8 运算符和表达式
位运算符是对字节或字中的二进制位(bit)进行逐位逻辑处理 或移位的运算符。C51语言中的位运算符如下所示。 “&” 运算符:进行逻辑与(AND)运算。 “|” 运算符:进行逻辑或(OR)运算。 “^” 运算符:进行逻辑异或(XOR)运算。 “~” 运算符:进行按位取补(NOT)运算。 “>>”运算符:进行右移运算。 “<<”运算符:进行左移运算。 位运算符的操作对象整型和字符型数据的字节或字,位操作不 能用于float、double、long double、void或其他聚合类型。支 持全部的位运算符,表明C51可以进行汇编语言所具有的位运 算,因此C51语言既具有高级语言的特点,也具有低级语言的 功能。
星嵌科技
mcustar.taobao.com
学51
3.4 整型变量
整型变量是整数类型的数据。整型变量是最常用 的数据类型。整型变量的定义格式是“类型说明 符 变量标识符,变量标识符…”。示例如下: unsigned char temp; //定义temp为短整型变量 其中,类型说明符与变量标识符之间至少有一个 空格。最后一个变量标识符必须以“;”结尾。 整型变量的前面可以加上不同的修饰符。
学51百度文库
1.2 时钟振荡电路
时钟振荡电路用于产生单片机正常工作时所需要时钟信 号。51系列单片机可以采用两种方式的时钟振荡电路: 内部振荡电路和外部振荡电路。下面分别介绍这两种方 式。 1.内部振荡电路 内部振荡电路是采用单片机内部 振荡器来产生工作所需的时钟。 51系列单片机内部包含一个高增 益的单级反相放大器,引脚XTAL1 和XTAL2分别为片内反相放大器 的输入端口和输出端口。外接无源晶振。 2.外部振荡电路 外部振荡电路是采用外部振荡器产生时钟信号直接供单 片机使用,外接有源晶振。
无法显示图像。计算机可能没有足够的内存以打开该图像,也可能是该图像已损坏。请重新启动计算机,然后重新打开该文件。如果仍然显示红色 “x”,则可能需要删除该图像,然后重新将其插入。
星嵌科技
mcustar.taobao.com
学51
1.3 单片机的复位电路
单片机的复位电路使单片机进入复位状态。通过复位操作可以完成单 片机的初始化,也可使处于死机状态下的单片机程序重新开始运行。 1.单片机复位的原理 单片机复位的原理是,在时钟电路开始工作后,在单片机的RST复位 引脚施加24个以上的时钟振荡脉冲的高电平,单片机便可以实现复位。 当RST引脚从高电平跳变为低电平后,单片机便从0000H地址开始执 行程序。 2.复位电路 最典型的上电复位电路如图所示,其基本原理是 利用RC电路的充放电效应。当单片机上电的时候, 复位电路通过电容加在RST引脚一个短暂的高电 平信号,这个高电平信号随着电容的充电而逐渐 降低,这个高电平持续的时间和RC电路的充放电 时间有关。使用时需要选择合适的电容和电阻来 使高电平的持续时间大于单片机的复位时间。
学51
3.5.1 标识符
标识符常用来声明某个对象的名称,如变量和常量的 声明、数组和结构的声明、自定义函数的声明以及数 据类型的声明等。示例如下。 int count; void Function1(); 在上面的例子中,count为整型变量的标识符, Function1为自定义函数的标识符。 在C51语言中,标识符可以由字母、数字(0~9)和 下划线“_”组成,最多可支持32个字符。并且,C51 标识符第一个字符必须是字母或者下划线“_”。例如 “ut1”、“ch_1”等,都是正确的。而“5count”则是 错误的标识符。另外,C51的标识符区分大小写,例 如“count1”和“COUNT1”代表两个不同的标识符。
星嵌科技
mcustar.taobao.com
学51
相关C 3. 相关C语言语法
3.1 C51程序的基本结构
单片机C51语言继承了C语言的特点,其程序结构与一般 C语言的程序结构没有差别。C51源程序文件的扩展名为 “.c”,如Test.c、Function.c等。每个C51工程中包含一 个名为“main()”的主函数,C51程序的执行总是从main() 函数开始的。当主函数中所有语句执行完毕,则程序执行 项目文件 结束。
mcustar.taobao.com
学51
3.7 声明
声明语句用于声明变量或者自定义函数。通过声明语句, 可以指定变量的类型、初始值以及函数的类型和形参等。 声明语句的一般形式如下: 类型说明符 变量名(=初始值); 类型说明符 函数名(形参); 值得注意的几点: 类型说明符为C51语言中的变量或者函数类型。 变量名或者函数名为读者定义的标识符,应符合C51标 识符的命名规则。 如果在声明变量的时候需要指定初始值,则可以使用 “=”来指定,否则“=”可以省略。 对于函数,如果不需要形参,则可以使用void来代替。
星嵌科技
mcustar.taobao.com
学51
3.5 C51的标识符与关键字 3.5 C51的标识符与关键字
标识符和关键字是一种编程语言最基本的组成 部分,C51语言同样支持自定义的标识符以及 系统保留的关键字。在进行C51程序设计时, 需要了解标识符和关键字的使用规则。
星嵌科技
mcustar.taobao.com
头文件 C源文件
星嵌科技
库文件 编译中间文件
keil uVision 项目结构
mcustar.taobao.com
可烧录文件
学51
include预处理命令 3.2 include预处理命令
以“#”号开头的是预处理命令。所谓预处理是指在进 行编译的第一遍扫描之前所作的工作。预处理是C语 言的一个重要功能,它由预处理程序负责完成。当对 一个源文件进行编译时,系统将自动引用预处理程序 对源程序中的预处理部分作处理,处理完毕自动进入 对源程序的编译。 #include<reg51.h> 包含预处理命令,文件包含命令的功能是把指定的文 件插入该命令行位置取代该命令行,从而把指定的文 件和当前的源程序文件连成一个源文件。
for(表达式1;表达式2;表达式3) { 语句; }
在程序中使用for语句的时候,应特 别注意如下几点:
一定要特别注意循环条件和循环变量 的变化方式,保证循环在一定条件满 足的时候能够结束,防止出现死循环 的情况。 for语句中的三个表达式都是可选择 项,但“;”不能省。例如,for(;;) 是一个合法的语句,但其表示一个无 限死循环。 for循环语句可以实现多级嵌套。 当循环体语句只有一条的时候,可以 省略花括号“{}”,否则不可以省略。
星嵌科技
mcustar.taobao.com
学51
LED流水灯原理 2. LED流水灯原理
2.1 流水灯原理图部分
星嵌科技
mcustar.taobao.com
学51
2.2 管脚电气信息
无法显示图像。计算机可能没有足够的内存以打开该图像,也可能是该图像已损坏。请重新启动计算机,然后重新打开该文件。如果仍然显示红色 “x”,则可能需要删除该图像,然后重新将其插入。
开始
执行循环体语句
真 判断表达式 假 结束
星嵌科技
mcustar.taobao.com
学51
3.10 延时函数
void delay(unsigned int t) { unsigned char i; while(t--) { for(i=0;i<125;i++) {} } } //延时子程序 延时子程序
星嵌科技
mcustar.taobao.com
学51
2.3 灌电流和拉电流 灌电流(sinking current) ,对一个端口而 言,如果电流方向是向其内部流动的则是 “灌电流”,比如一个IO通过一个电阻和 一个LED连接至VCC,当该IO输出为逻辑0 时可以点亮LED。 LED 拉电流(sourcing current),对一个端口 而言,如果电流方向是向其外部流动的则 是“拉电流”,比如一个IO通过一个电阻 和一个LED连至GND,当该IO输出为逻辑1 时能不能点亮LED。
星嵌科技
mcustar.taobao.com
学51
3.9 循环控制结构
循环语句提供了一种以最少的代码来执行多条 重复语句的形式。 C51语言中的循环语句有如下几类: for语句 while语句 do-while语句
星嵌科技
mcustar.taobao.com
学51
for语句 3.9.1 for语句
假 判断表达式 真 执行循环体语句
星嵌科技
结束
mcustar.taobao.com
学51
do-while语句 3.9.3 do-while语句
do { 语句; }while(表达式);
在程序中使用do-while语句的时候,应 特别注意如下几点: 在循环体语句中一定要加入能够改变 while表达式取值的语句,保证循环 在一定条件满足的时候能够结束,防 止出现死循环的情况。 do-while语句和while语句区别在于 执行循环体语句的顺序不同。 do-while循环语句也可以实现多级嵌 套。 当循环体语句只有一条的时候,可以 省略花括号“{}”,否则不可以省略。
星嵌科技
mcustar.taobao.com
学51
while语句 3.9.2 while语句
while(表达式) { 语句; }
开始
在程序中使用while语句的时候,应特别 注意如下几点: 在循环体语句中一定要加入能够改变 while表达式取值的语句,保证循环 在一定条件满足的时候能够结束,防 止出现死循环的情况。 while语句的表达式可以永远为真, 此时表示一个无限死循环。例如, while(1)。 while循环语句可以实现多级嵌套 当循环体语句只有一条的时候,可以 省略花括号“{}”,否则不可以省略。 while语句循环体内允许空语句。
星嵌科技
mcustar.taobao.com
学51
C51的数据类型 3.3 C51的数据类型
C51的基本数据类型有整型(int)、浮点型(float)、字符型 (char)、无值型(void)。在基本数据类型中,除void类型外,其 前面均可以有各种修饰符。修饰符用来改变基本类型的意义,以便更 准确地适应各种情况的需求。 常用的修饰符有signed(有符号)、unsigned(无符号)、long(长 型符)、short(短型符)。在C51语言中的所有数据类型的字长和取 值范围,如表所示。
学51
一气呵成学51 一气呵成学51
姜老师
星嵌科技
主 讲
mcustar.taobao.com
学51
第5课 流水灯实验
1. 2. 3. 4. 单片机最小系统概述。 LED流水灯原理。 流水灯程序相关语法。 实际操作,验证程序。
星嵌科技
mcustar.taobao.com
学51
51系列单片机的最小硬件系统 1.1 51系列单片机的最小硬件系统
星嵌科技
mcustar.taobao.com
学51
3.5.2 关键字
关键字是C51语言重要的组成部分,是C51编 译器已定义保留的专用特殊标识符,有时也称 为保留字。这些关键字通常有固定的名称和功 能,如int、float、if、for、do、while、case等。 扩展关键字,如sbit、using 、xdata、data、 reentrant 、interrupt、sfr等。
星嵌科技
mcustar.taobao.com
学51
3.11 主函数分析
void main(void) { while(1) { temp=0xFE; for(i=0;i<8;i++) { P2 = temp; temp = (temp<<1)|1; delay(100); } } } // 主程序
51系列单片机的最小硬件系统是指能让单 片机正常工作的最小硬件电路。对于8051 系列单片机及其兼容的型号,其电路的最小 系统大致相同,这里以STC89C52为例,介 绍典型的51系列单片机最小硬件电路,如 图所示。
星嵌科技
mcustar.taobao.com
学51
星嵌科技
mcustar.taobao.com
星嵌科技
mcustar.taobao.com
学51
变量、函数声明、 3.6 变量、函数声明、定义
unsigned char i; void delay(void); …… // 变量的声明; // 函数的声明;
// 函数的定义;
void delay(unsigned int t) { … … }
星嵌科技