五种编程方式实现流水灯的单片机C程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五种编程方式实现流水灯的单片机
C 程序
//功能:
采用顺序结构实现的流水灯控制程序
/*此方式中采用的是字操作(也称为总线操作)*/
#include<reg
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数{while
(1){
P1=Oxfe;//点亮第1 个发光二极管,
delay
(200);//延时
P1=Oxfd;//点亮第2 个发光二极管,
delay
(200);//延时
P1=Oxfb;//点亮第3 个发光二极管delay
(200);//延时
P1=0xf7;〃点亮第4 个发光二极管delay
(200);//延时
P1=Oxef;//点亮第5 个发光二极管delay
(200);//延时
P1=Oxdf;//点亮第6 个发光二极管delay
(200);//延时
P1=Oxbf;//点亮第7 个发光二极管delay
(200);//延时
P1=0x7f; 〃点亮第8 个发光二极管delay
(200);//延时}}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i 控制空循环的外循环次数,共循环i*255 次
//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和k
for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时
for(j=0;j<255;j++);}//功能:
采用循环结构实现的流水灯控制程序
//此方式中采用的移位,按位取反等操作是位操作
#include<reg
包含头文件REG
voiddelay(unsignedchari); 〃延时函数声明
voidmain()//主函数{unsignedchari,w;
while
(1){w=0x01;//信号灯显示字初值为01H
for(i=0;i<8;i++){P1=~w;//显示字取反后,送P1 口
delay
(200);//延时
w<<=1;//显示字左移一位}}}//函数名:delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i 控制空循环的外循环次数,共循环i*255 次
//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和k
j++);}/*
*****// 功能:
for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时
for(j=0;j<255;
***************************************************************
采用位运算符编写的流水灯控制程序,显示效果为挨次熄灭信号灯
//此方式也是典型的顺序结构
#include<reg
voiddelay(unsignedchari); 〃延时函数声明
voidmain()//主函数{while
(1){
P1=OxOO;〃P1 口全部清0,即点亮8 个发光二极管
delay
(200);//延时
P1=P1|0x01;//熄灭第1 个发光二极管delay
(200);//延时
P1=P1|0x03;//熄灭第
1、个发光二极管delay (200);//延时
P1=P1|0x07;//熄灭第1〜3 个发光二极管delay
(200);//延时
P1=P1|0x0f;//熄灭第1〜4 个发光二极管delay
(200);//延时
P1=P1|0x1f;//熄灭第1〜5 个发光二极管delay
(200);//延时
P1=P1|0x3f; 〃熄灭第1〜6 个发光二极管delay
(200);//延时
P1=P1|0x7f; 〃熄灭第1〜7 个发光二极管delay
(200);//延时
P1=P1|0x7f;//熄灭所有发光二极管
delay
(200);//延时}}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i 控制空循环的外循环次数,共循环i*255 次
//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和k
for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时
for(j=0;j<255;
j++);}/**********************************************************/
//功能:
采用数组实现的流水灯控制程序
//此方式也是典型的循环结构
#include<reg
包含头文件REG
voiddelay(unsignedchari); 〃延时函数声明
voidmain()//主函数{unsignedchari;
unsignedchardisplay[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
while
(1){for(i=0;i<8;i++){P1=display[i]; 〃显示字送P1 口
delay
(200);//延时}}}//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i 控制空循环的外循环次数,共循环i*255 次
//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和k
for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时
for(j=0;j<255;j++);}#include<reg
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uintz){uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}voidmain(){uchara,i,j;
while
(1){for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P2=a; delay(200);
a=_crol_(a,1);//11110}a=0x7f;for(i=0;i<8;i++){P2=a; delay(200);
a=_cror_(a,1);}}P2=0xff;
for(j=0;j<10;j++)}}{
}delay(300);
P2=~P2;。