五种编程方式实现流水灯的单片机C程序
单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。
那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。
一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。
#include<reg51.h> //头文件定义。
或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。
//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。
因为我们把LED的正通过电阻接至VCC。
P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。
那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。
如果我们要试着点亮其他的LED,也类似上述语句。
这里就不再讲了。
点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。
我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。
假设我们有8个LED分别接在P1口的8个引脚上。
硬件连接,在P1_1--P1_7上再接7个LED即可。
例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C 程序//功能:采用顺序结构实现的流水灯控制程序/*此方式中采用的是字操作(也称为总线操作)*/#include<regvoiddelay(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 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}//功能:采用循环结构实现的流水灯控制程序//此方式中采用的移位,按位取反等操作是位操作#include<reg包含头文件REGvoiddelay(unsignedchari); 〃延时函数声明voidmain()//主函数{unsignedchari,w;while(1){w=0x01;//信号灯显示字初值为01Hfor(i=0;i<8;i++){P1=~w;//显示字取反后,送P1 口delay(200);//延时w<<=1;//显示字左移一位}}}//函数名:delay//函数功能:实现软件延时//形式参数:unsignedchari;//i 控制空循环的外循环次数,共循环i*255 次//返回值:无voiddelay(unsignedchari)//延时函数,无符号字符型变量i 为形式参数{unsignedcharj,k;〃定义无符号字符型变量j 和kj++);}/******// 功能:for(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;***************************************************************采用位运算符编写的流水灯控制程序,显示效果为挨次熄灭信号灯//此方式也是典型的顺序结构#include<regvoiddelay(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 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}/**********************************************************///功能:采用数组实现的流水灯控制程序//此方式也是典型的循环结构#include<reg包含头文件REGvoiddelay(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 和kfor(k=0;k<i;k++) 〃双重for 循环语句实现软件延时for(j=0;j<255;j++);}#include<reg#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(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;。
51单片机流水灯程序

51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。
流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。
下面详细介绍51单片机流水灯程序的编写。
一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。
一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。
具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。
•将每个LED灯的阴极通过限流电阻连接到P1端口。
•将P2端口的每个引脚依次连接到每个LED灯的阴极。
二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。
在主函数中,使用一个while循环控制流水灯效果。
在循环内部,使用一个for循环控制8个LED灯的状态。
在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。
五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序流水灯是一种常见的灯光效果,常用于装饰和展示。
实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。
下面分别介绍这五种方式实现流水灯的程序。
1.顺序编程方式:顺序编程是最常见的编程方式,也是最直接的方式。
下面是使用顺序编程方式实现流水灯的C程序:```c#include <reg52.h>void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainunsigned char led = 0x80; // 初始灯光状态while(1)P0 = led; // 输出灯光状态delay(500); // 延时一段时间led >>= 1; // 右移一位,实现流水灯效果if(led == 0) // 到达最右边后重新开始led = 0x80;}}```2.状态机编程方式:状态机编程是一种基于状态的编程方式,通过定义不同的状态和状态转换来实现流水灯效果。
下面是使用状态机编程方式实现流水灯的C程序:```c#include <reg52.h>typedef enumState1,State2,State3,State4,State5} State;void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainState state = State1; // 初始状态为State1 while(1)switch(state)case State1:P0=0x80;delay(500);state = State2;break;case State2:P0=0x40;delay(500);state = State3;break;case State3:P0=0x20;delay(500);state = State4;break;case State4:P0=0x10;delay(500);state = State5;break;case State5:P0=0x08;delay(500);state = State1;break;}}```3.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。
C51单片机实现呼吸灯和花样流水灯程序

C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
多种方法写出的51单片机流水灯C语言程序

目录流水灯最原始 (1)流水灯位左移 (3)流水灯移位函数 (4)流水灯数组 (5)流水灯精确定时器 (6)流水灯最原始#include "reg51.h"sbit p0=P1^0;sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){while(1){P1=0;p0=1;mdelay(1000);p0=0;p1=1;mdelay(1000);p1=0;p2=1;mdelay(1000);p2=0;p3=1;mdelay(1000);p3=0;p4=1;mdelay(1000);p4=0;p5=1;mdelay(1000);p5=0;p6=1;mdelay(1000);p6=0;p7=1;mdelay(1000);p7=0;}}流水灯位左移#include "reg51.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;unsignedint led;while(1){led=0xfe;for(i=0;i<8;i++){P1=led;mdelay(1000);led=led<<1;led=led|0x01;}}}流水灯移位函数#include "reg51.h"#include "intrins.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char led;led=0x01;while(1){P1=led;led=_crol_(led,1);mdelay(1000);}}流水灯数组#include "reg51.h"unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;while(1){for(i=0;i<8;i++){P1=table[i];mdelay(1000);}}}流水灯精确定时器#include "reg51.h"#include "intrins.h"unsignedint count=0,led;void main(){P1=0x00;led=0x01;EA=1;ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;for(;;){;}}voidbiao() interrupt 1{count++;if(count==20){count=0;P1=led;led=_crol_(led,1);}TH0=0x3c;TL0=0xb0;}。
单片机流水灯程序

单片机流水灯程序流水灯是一种简单而常见的电子技术实验项目,也是学习掌握单片机编程的基本操作之一。
本文将介绍如何使用C语言编写单片机流水灯程序,并通过Markdown文本格式输出。
硬件准备在开始编写流水灯程序之前,我们需要准备以下硬件设备:1.单片机开发板(如:Arduino、STM32等)2.LED灯(可根据自己的需求选择,一般使用红色、黄色、绿色等常见颜色的LED灯即可)3.杜邦线(用于连接单片机和LED灯)程序编写引入头文件首先,我们需要引入相应的头文件,以便使用单片机相关的功能库和定义常量。
#include <Arduino.h>定义引脚接下来,我们需要定义引脚,将LED灯的接口与开发板的引脚连接起来。
#define LED_PIN_1 2#define LED_PIN_2 3#define LED_PIN_3 4#define DELAY_TIME 500在这个例子中,我们使用了3个LED灯,分别连接到开发板的2、3、4号引脚。
DELAY_TIME用于控制每个灯亮起的时间间隔,单位是毫秒。
初始化引脚在进入主程序之前,我们需要对引脚进行初始化,设置引脚的输出模式。
void setup() {pinMode(LED_PIN_1, OUTPUT);pinMode(LED_PIN_2, OUTPUT);pinMode(LED_PIN_3, OUTPUT);}主程序接下来就是我们的主程序部分,我们可以使用循环语句来实现LED灯的流水效果。
void loop() {digitalWrite(LED_PIN_1, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_1, LOW);digitalWrite(LED_PIN_2, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_2, LOW);digitalWrite(LED_PIN_3, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_3, LOW);}在这个例子中,我们依次点亮每个LED灯,并延迟一定的时间后熄灭,然后依次点亮下一个LED灯,以此循环。
单片机流水灯程序大全

1、用Proteus软件画出电路原理图。
要求在P1.0至P1.7口线上分别接LED0至LED7八个发光二极管,在P3.0口线上接一蜂鸣器。
2、编写程序:要求LED0至LED7以秒速率循环右移。
3、编写程序:要求LED0至LED7以秒速率循环左移。
4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。
查询方式右移ORG 0000HCLRO: MOV IE, #00H;关闭中断MOV TMOD, #10H;方式1MOV SP, #30H; 开辟栈底MOV TH1, #3CH;采用定时器1定时50msMOV TL1, #0B0H;SETB TR1;开启定时器MOV P1, #07FH;起始状态LED7亮MOV A, #7FH;MOV P3, #0FFH;MAIN: MOV R3,#14H;20次LCALL TIME; 定时一秒CLR P3.0;RR A;右移MOV P1, A;灯右移LJMP MAIN;定时一秒的子程序TIME: JBC TF1, LOOP2;溢出标志位为1跳转AJMP TIME;LOOP2: MOV TH1, #3CH;MOV TL1, #0B0H;DJNZ R3, TIME;R3先自减再,判断R3是否为0,为0跳转RET;返回主程序END中断方式左移低电平有效START: LJMP MAINORG 000BHLJMP TTCOORG 0100HMAIN: MOV SP, #30H; 开辟栈底SETB EA; 打开总中断SETB ET0; 打开定时器中断MOV R1, #00H;MOV R2, #14H;MOV A, #0FEH; 给A送值MOV P1, A;初始状态LED0亮LOOP: LCALL TIME;调用一秒的延时子程序RL A;左移MOV P1, A;灯左移CLR P3.0;开启蜂鸣器LJMP LOOP;定时为1S,TIME: MOV TMOD, #01H; 设置定时器为工作方式1MOV TH0, #3CH; 初始化定时时间50usMOV TL0, #0B0H;SETB TR0;LOOP2: CJNE R1, #14H, LOOP2; 出现R1=14H才往下执行,MOV R1, #00H;RETORG 2000H中断程序TTCO: MOV TH0, #3CHMOV TL0, #0B0H; 再次初始化定时时间INC R1LOOP1: RETIEND双向流水灯循环ORG 0000HLJMP MAINORG 000BHLJMP TTC0MAIN: MOV R0, #08HMOV R1, #00HMOV A, #0FEHSETB EASETB ET0;LOOP1: LCALL TIMEMOV P1, ARL ACPL P3.0;DJNZ R0, LOOP1MOV R0,#08H;LOOP2: LCALL TIMERR A ;MOV P1,A;CPL P3.0DJNZ R0, LOOP2;MOV R0,#08H;LJMP LOOP1;TIME: MOV TMOD, #01HMOV TH0, #3CHMOV TL0, #0B0HSETB TR0;HERE: CJNE R1, #14H, HEREMOV R1, #00HRETORG 2000HTTC0: INC R1;MOV TH0, #3CHMOV TL0, #0B0HRETIEND十六进制数,12MHZ,ORG 0000HCLRO: MOV IE, #00H;MOV TMOD, #10H;方式1MOV TH1, #3CH;定时器1定时50msMOV TL1, #0B0H;SETB TR1;开始定时器MOV R3, #00H;MOV P1, #0FFH;led初始全灭MOV A, #00H;MOV P3, #0FFH;MOV SP, #30H;开辟堆栈MAIN: LCALL TIME;MOV R3, #00H;ADDC A, #01H;高电平有效MOV R2, A;保护A,CPL A;对A取反MOV P1, A;把A赋格P1MOV A, R2;取出以前的ACLR P3.0;开启蜂鸣器CJNE A, #0FFH, MAIN;MOV A, #00H;清零重新开始LJMP MAIN;延时1ms子程序TIME: JBC TF1, LOOP2;溢出标志位AJMP TIME;LOOP2: INC R3;MOV TH1, #3CH;MOV TL1, #0B0H;CJNE R3, #14H, TIME;执行20次RETENDLED0表示第七位--LED7表示第0位ORG 0000H ; 十六进制计数规律翻转亮灯(由原来子程序——查询改写)MAIN: MOV A, #01HCLR EAMOV R0, #14H;定20次MOV P1, #80HLOOP1: LCALL DELAYMOV R0, #14HINC AMOV 20H, A; 将A的值存入20H位寻址区JB 20H.0, FZ1; 判断20H.0是否为1NEXT1: JB 20H.1, FZ2; 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned char j, k;〃定义无符号字符型变量j和k
for(k = 0; k < i; k++)//双重for循环语句实现软件延时
for(j = 0; j < 255; j++);
}
/**********************************************************///功能:采用数组实现的流水灯控制程序
for(j = 0; j < 255; j++);
}
//功能:采用循环结构实现的流水灯控制程序
//此方式中采用的移位,按位取反等操作是位操作
#include <reg51.h>〃包含头文件REG51.H
void delay(unsigned char i);〃延时函数声明
void main()〃主函数
〃延时
P1 = 0xef;
//点亮第5个发光二极管
delay(200);
〃延时
P1 = 0xdf;
//点亮第6个发光二极管
delay(200);
〃延时
P1 = 0xbf;
//点亮第7个发光二极管
delay(200);
〃延时
P1 = 0x7f;
//点亮第8个发光二极管
delay(200);
〃延时
}
}
//函数名:delay
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
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;
while(1)
{
for(i = 0; i < 8; i++)
{
P1 = display[i];//显示字送P1口
delay(200);〃延时
}
}
}
//函数名:delay
//函数功能:实现软件延时
//形式参数:unsigned char i;
//i控制空循环的外循环次数,共循环i*255次
//返回值:无
五种编程方式实现流水灯的单片机C程序
//功能:采用顺序结构实现的流水灯控制程序
/*此方式中采用的是字操作(也称为总线操作)*/
#include <reg51.h>
void delay(unsigned char i); //延时函数声明
void main()〃主函数
{
while(1) {
P1 = 0xfe;
void delay(unsigned char i);〃延时函数声明
void main()〃主函数
(
while(1) (
P1 = 0x00;//P1口全部清0,即点亮8个发光二极管
〃延时
//熄灭第1个发光二极管
〃延时
//熄灭第1、2个发光二极管
〃延时
//熄灭第1〜3个发光二极管
〃延时
//熄灭第1〜4个发光二极管
//点亮第1个发光二极管,0.000389s
delay(200);
〃延时
P1 = 0xfd;
//点亮第2个发光二极管,0.155403s,0.1558
delay(200);
〃延时
P1 = 0xfb;
//点亮第3个发光二极管
delay(200);
〃延时
P1 = 0Leabharlann f7;//点亮第4个发光二极管
delay(200);
//形式参数:unsigned char i;
//i控制空循环的外循环次数,共循环i*255次
//返回值:无
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
(
unsigned char j,k;〃定义无符号字符型变量j和k
for(k = 0; k < i; k++)//双重for循环语句实现软件延时
unsigned char i,w;
while(1)
(
w = 0x01;//信号灯显示字初值为01H
for(i = 0; i < 8; i++)
(
P1 = ~w;//显示字取反后,送P1口
delay(200);//延时
w <<= 1;//显示字左移一位
}
}
}
//函数名:delay
//函数功能:实现软件延时
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
(
unsigned char j, k;〃定义无符号字符型变量j和k
for(k = 0; k < i; k++)//双重for循环语句实现软件延时
for(j = 0; j < 255; j++);
}
#include<reg52.h>
//函数功能:实现软件延时
//形式参数:unsigned char i;
//i控制空循环的外循环次数,共循环i*255次
//返回值:无
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
{
unsigned char j, k;〃定义无符号字符型变量j和k
for(k = 0; k < i; k++)//双重for循环语句实现软件延时
//此方式也是典型的循环结构
#include <reg51.h>〃包含头文件REG51.H
void delay(unsigned char i);〃延时函数声明
void main()〃主函数
(
unsigned char i;
unsigned char display[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
//熄灭所有发光二极管
delay(200);
〃延时
}
}
//函数名:delay
//函数功能:实现软件延时
//形式参数:unsigned char i;
//i控制空循环的外循环次数,共循环i*255次
//返回值:无
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
for(j = 0; j < 255; j++);
}
/*********************************************************************/
//功能:采用位运算符编写的流水灯控制程序,显示效果为依次熄灭信号灯
//此方式也是典型的顺序结构#include <reg51.h>