项目一设计制作流水灯课稿.ppt
文本预览下载声明
流水灯项目设计制作 1.效果图 2.项目设计 1.以AT89S51单片机为核心芯片,通过控制LED的各式花样亮灭不。 2.电路图 1头文件 #include reg51.h 2主函数 main() { ①初始化语句 ②While(1) //重复执行的死循环 { 循环体语句 } } 主程序:main() main这个主程序名不能随便取,只能是main,并且一个系统中只能有一个 活动1:单只闪烁控制 程序代码: 活动2:8只LED闪烁控制 2.2 程序控制流程图 2.3 源程序 活动3:单只左移流灯效果 3.1控制信号分析 3.2 程序流程图 3.3 程序代码 3.3.2 左移流水控制优化程序 方法一控制信号用数组来优化的程序 #include AT89X51.h //预处理命令 unsigned char const tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //将数组保存到单片机的ROM程序存储区 //***主函数 void main(void) //主函数名 { unsigned char i; unsigned int a; while(1) { for(i=0;i8;i++) //信号数 { for(a=0;a10000;a++); //延时 P1=tab[i]; //将数组tab中的元素依次取出, 从P1送出口 } } } 方法二 控制信号用计算来优化程序 /****接到P1口上0到7位的8只LED灯依次点亮 (左移流水灯)****/ //P1.0亮 0xfe//P1.1亮 0xfd//P1.2亮 0xfb//P1.3亮 0xf7//P1.4亮 0xef//P1.5亮 0xdf//P1.6亮 0xbf//P1.7亮 0x7f#include AT89X51.h //预处理命令 #include intrins.h //含移位函数的头文件 //***主函数 void main(void) //主函数名 {unsigned char i; unsigned int a; P1=0xfe ;//设P1口初值也就是P1.0上的LED亮 while(1) { for(i=0;i8;i++) //信号数 { for(a=0;a10000;a++); //延时 P1=_corl_(P1,1) //将P1的值循环左移一位后,从P1送出口 } } } 4.3.3.3 关于循环左移_corl_函数 4.3.3.4 关于延时语句函数化 unsigned int x for(a=0;a10000;a++); //延时 这个软件延时大约是10ms, 对于一个程序有多个不时延时要求是,这个控制语句就不合适,同时为减少代码的重叠,改用函数开形式。 #include reg51.h //预处理命令 #include intrins.h //含移位函数的头文件 //**delay函数能延时 Xms**** void delay(unsigned int x) { unsigned int i; for(;x0;x--) //下面的1ms延时语句执行X遍 for(i=125;i0;i--);//大约延时1ms } #include reg51.h //预处理命令 #include intrins.h //含移位函数的头文件 //**delay函数能延时 Xms**** void delay(unsigned int x) { unsigned int i; for(;x0;x--) //下面的1ms延时语句执行X遍 for(i=125;i0;i--);//大约延时1ms } //***主函数 void main(void) //主函数名 { unsigned char i; P1=0xfe ; //设P1口初值 while(1
显示全部