单片机-流水灯的程序ppt精选课件

上传人:尔*** 文档编号:134833843 上传时间:2020-06-09 格式:PPT 页数:19 大小:161.50KB
返回 下载 相关 举报
单片机-流水灯的程序ppt精选课件_第1页
第1页 / 共19页
单片机-流水灯的程序ppt精选课件_第2页
第2页 / 共19页
单片机-流水灯的程序ppt精选课件_第3页
第3页 / 共19页
单片机-流水灯的程序ppt精选课件_第4页
第4页 / 共19页
单片机-流水灯的程序ppt精选课件_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《单片机-流水灯的程序ppt精选课件》由会员分享,可在线阅读,更多相关《单片机-流水灯的程序ppt精选课件(19页珍藏版)》请在金锄头文库上搜索。

1、 利用单片机实现流水灯 杨美丽 方法一 利用位定义实现流水灯 8位二极管循环点亮 相关知识一 sbit当我们在C语言中直接给P2口时 编译器并不识别 而且这也是种不合法的写法 所以我们要让P2与编译器建立一定的联系 于是就采用了KEILC中的关键字sbit sbit是一个特殊功能寄存器的位变量 bit和sbit都是C51扩展的变量类型 典型的应用就是我们前面用的sbitled P2 0 他的意思就是定义led为P2口的第一位 和char之类的差不多 不同点就是char是8位 而sbit只有一位 而且它只有两种值 1或者0 在编程中我们一旦用sbit定义了一个变量 那么这个变量就有了确定的地址

2、如你使用了char 也就限制了它的使用值一样 二 子函数的调用 1 不带参数函数的写法及调用在C语言中当一些语句不止一次使用到 而且语句内容相同 我们就可以把这样的语句写成一个不带参数的子函数 当在主函数中需要这些语句时 直接调用这个语句就可以 例如 延时语句for i 0 i xms i for j 0 j xms j 我们可以把他的调用语句写成 voiddelayms chari charj for i 0 i 100 i for j 0 j 100 j 其中void表示这个函数执行完后不返回任何数据 内无任何东西 所以这是个无参数的函数 Delayms是函数名 2 带参数函数的写法及调用

3、 voiddelayms unsignedcharxms chari charj for i 0 i xms i for j 0 j xms j 在这个函数中我们发现其括号中多了一个 unsignedcharxms 这就是这个函数所带的参数 其中xms是一个unsignedchar的变量 又叫这个函数的形参 在调用此函数时我们用一个具体真是的数据来代替此形参 这个真实数据被称为实参 形参被实参代替之后 在子函数中和形参名相同的数据都将被实参代替 调用注意事项 子函数可以写下主函数的前面或是后面 但是不可以写在主函数的里面 当写在后面时 必须在主函数之前申明子函数 声明方法为 将返回特性 函数名

4、及后面的小括号完全复制 若是无参数 则小括号内位空 若有参数 则需要在小括号内 依次写上参数类型 只写参数 无需写参数 参数类型之间用逗号隔开 最后在小括号的后面加上冯号 当子函数写在主函数的前面时无需声明 因为在写函数体的时候已近相当于声明了函数本身 通俗的讲 声明子函数的目的是为了编译器在编译主程序的时候 当它遇到子函数知道有这样的一个函数存在 并且知道他的内部情况 以便为其分配空间 方法一 利用位定义实现流水灯 8位二极管循环点亮 编程思路 a 先点亮第一盏灯 延时点亮第二盏 依次延时8盏灯全部点亮 b 当8盏灯全部点亮时 熄灭8盏灯 c 进入循环 程序分析 includesbitled

5、1 P2 0 sbitled2 P2 1 sbitled3 P2 2 sbitled4 P2 3 sbitled5 P2 4 sbitled6 P2 5 sbitled7 P2 6 sbitled8 P2 7 voiddelay unsignedcharx voidmain while 1 led1 0 delay 120 led2 0 delay 120 led3 0 delay 120 led4 0 delay 120 led5 0 delay 120 led6 0 delay 120 led7 0 delay 120 led8 0 delay 120 led1 1 led2 1 led3

6、 1 led4 1 led5 1 led6 1 led7 1 led8 1 voiddelay unsignedcharx chari charj for i 0 i x i for j 0 j x j 方法二 利用总线控制实现流水灯 8位二极管循环点亮 相关知识二进制和十六进制之间的相互转换 例如 二进制数11111110转换为十六进制十六进制数为0 xfe 方法二 利用总线控制实现流水灯 8位二极管循环点亮 编程思路 a 先点亮第一盏灯 延时点亮第二盏 依次延时8盏灯全部点亮 b 当8盏灯全部点亮时 熄灭8盏灯 c 进入循环 程序分析 includevoiddelayms unsigned

7、charxms voidmain while 1 P2 0 xfe delayms 120 P2 0 xfc delayms 120 P2 0 xf8 delayms 120 P2 0 xf0 delayms 120 P2 0 xe0 delayms 120 P2 0 xc0 delayms 120 P2 0 x80 delayms 120 P2 0 delayms 120 voiddelayms unsignedcharxms chari charj for i 0 i xms i for j 0 j xms j 方法三 利用移位操作实现流水灯 8位二极管循环点亮 相关知识 按位左移是将一个

8、运算量的各位依次左移若干位 低位补0 高位舍弃不要 假设机器字长为8位 变量a的值为16 将a左移二位 即a a 2 左移前00010000左移后01000000由此看出 左移一位相当于该数乘2 左移二位相当于乘4 即22 但这要以该数左移之后不 溢出 为前提 所谓 溢出 指该数已超过机器字长所能容纳的范围 如该例若继续左移二位 该数为16 24 256 超出了字长8位的表示范围 257 即产生了溢出 一 按位左移 二 按位右移 按位右移是将一个运算量的各位依次右移若干位 低位被移出 高位对无符号数补0 对有符号数要按最高符号位自身填补 右移一位相当于该数除以2 但有可能带来误差 假设机器字长

9、为8位 变量a值为15 将a右移二位 即a a 2 右移前00001111右移后00000011如果a是带符号的负数 a 16 存放在机器中的补码为11110000 则a a 2 值为 4 右移前11110000右移后11111100 三 循环移动 a 循环左移最高位移入最低位 其它依次向左移动一位 C语言中没有专门的指令 通过移位指令和简单逻辑运算来实现循环左移 或直接利用C51库中自带的函数 crol 实现 b 循环右移最低位移入最高位 其它位依次向右移一位 C语言中没有专门的指令 通过移位指令与简单的逻辑运算可以实现循环右移 或专门利用C51库中自带函数 cror 实现 include

10、include defineuintunsignedint defineucharunsignedcharuinti j ucharLed voidmain Led 0 xfe while 1 P2 Led for i 1 i 800 i for j 1 j 800 j Led Led 1 if P2 0 x00 Led 0 xfe 方法三 利用按位左移实现流水灯 相关知识一 C51中库函数 crol 的应用 crol 是一个函数名 是51单片机自带的一个内部函数 包含在C51头文件 intrins h 中 也就是说如果在程序中要用到这个函数 那就必须在程序的开头处包含这个文件 再来看函数特性

11、 unsignedchar crol unsignedchara unsignedcharb unsignedchar 这种函数叫做有返回值 带参数的函数 也就是说程序执行完这个函数后 通过它内部的某些运算而得出一个新值 该函数最终将新值返回给调用它的语句 a crol a 1 他的意思就是讲a循环向左移动一位 方法四 利用移位操作实现流水灯 8位二极管循环点亮 利用51单片机函数 crol 实现流水灯 编程思路 a 在程序的开头加函数 crol 所在的头文 includeb 点亮第一盏灯 执行循环左移 使函数自己实现依次点亮 程序分析 voidmain Led 0 xfe while 1 P2 Led for i 1 i 200 i for j 1 j 200 j Led crol Led 1 if P2 0 x00 Led 0 xfe include includeinti j charLed 谢谢

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号