基本信息
文件名称:《单片机技术与应用》 课件 项目一任务6-左移右移实现流水灯.pptx
文件大小:475.34 KB
总页数:17 页
更新时间:2025-06-19
总字数:约1.76千字
文档摘要

任务六左移右移实现流水灯

任务描述用AT89C51的P1口,接8只LED,即D1,D2,…,D7,D8,编写程序,使得8只LED循环点亮,时间间隔1秒,即刚开始点亮D1,1秒后点亮D2,接着点亮D3,D4,…,D8,然后点亮D7,D6,…,D2,D1,重复循环。

知识链接一单片机时序的概念二移位函数实现流水灯

一单片机时序的概念单片机内的各种操作都是在一系列脉冲控制下进行的,而各脉冲在时间上是有先后顺序的,这种顺序就称为时序。单片机的时序定时单位从小到大依次为:振荡周期、状态周期、机器周期和指令周期。振荡周期是指晶体振荡器直接产生的振荡信号的周期,是振荡频率fosc的倒数,用P表示。状态周期(或时钟周期S)是振荡周期的两倍,它分为P1节拍和P2节拍。1个机器周期是由6个状态周期构成,12个振荡周期。执行一条指令所需的时间称为指令周期。

若MCS-51单片机外接晶振为12MHz时,则单片机的四个周期的具体值为:振荡周期=1/12MHz=1/12μs=0.0833μs时钟周期=1/6μs=0.167μs机器周期=1μs指令周期=1~4μs

二移位函数实现流水灯单片机实现霓虹灯也可以通过KeilC51的移位函数_crol_和_cror_函数来完成。_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回;_irol_,_iror_:将int型变量循环向左(右)移动指定位数后返回;_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回。

举例说明aa=_crol_(a,1);//左移一位//程序执行后,aaa=_cror_(a,2);//右移两位//程序执行后,a

提示请用移位函数来实现一下LED流水灯效果,使用请用“#includeintrins.h”这个指令引入intrins.h头文件。

任务实施1.硬件电路2.程序设计

1.硬件电路

2.程序设计#includereg52.h//包含单片机寄存器的头文件#includeintrins.h//包含_cror_和_crol_函数#defineuintunsignedint//宏定义,定义uint为无符号整型变量#defineucharunsignedchar//宏定义,定义uchar为无符号字符变量uchari,j;//定义变量i,j

voiddelay1s(void){uchara,b,c;//定义循环变量for(c=167;c0;c--)for(b=171;b0;b--)for(a=16;a0;a--);}延时时间为1秒的延时函数

voidmain(){while(1)//一直执行{j=0x01; for(i=0;i8;i++){P1=~j;//左移的值送P1口 delay1s();//延时1s j=_crol_(j,1);//左移1位 }主函数for(i=0;i8;i++){P1=~j;//接上面左移的值送P1口delay1s();//延时1s j=_cror_(j,1);//右移一位}}}

任务小结流水灯亮灯比较有规律,8个LED中7个熄灭,1个点亮,1秒后,向前或向后移动一个位置亮另外一个灯,如此循环,容易用for和移位函数来实现。

综合评价

课后作业AT89C51的时钟周期、机器周期、指令周期是如何定义的?当振荡频率为6MHz时,一个机器周期为多少微秒?

谢谢观看《单片机技术与应用》课程