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程序流水灯是一种常见的灯光效果,常用于装饰和展示。
实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。
下面分别介绍这五种方式实现流水灯的程序。
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.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。
多种方法写出的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;}。
STM32 ARM C语言编程之流水灯
#include "stm32f10x.h"//头文件包含将stm32的函数库stm32f10x.h包进来#define RCC_GPIO_LED RCC_APB2Periph_GPIOF//宏定义LED使用的GPIO时钟#define LEDn 4//宏定义LED数量#define GPIO_LED GPIOF//宏定义LED灯所使用的gpio组#define DS1_PIN GPIO_Pin_6//宏定义LED1所使用的gpio管脚#define DS2_PIN GPIO_Pin_7//宏定义LED2所使用的gpio管脚#define DS3_PIN GPIO_Pin_8//宏定义LED3所使用的gpio管脚#define DS4_PIN GPIO_Pin_9//宏定义LED4所使用的gpio管脚GPIO_InitTypeDef GPIO_InitStructure;//gpio口初始化结构体ErrorStatus HSEStartUpStatus;// (等待时钟的稳定?)(使强制执行c规则)u8 count=0;//定义8位无符号数据变量void RCC_Configuration(void);//初始化stm32系统时钟void NVIC_Configuration(void);//定义中断管理初始化函数void Delay(vu32 nCount);//声明延时函数void Turn_On_LED(u8 LED_NUM);//LED控制函数int main(void){//配置GPIO口管脚模式RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE);//使能LED灯所使用的时钟GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN;//设定LED所使用的管脚,使之有效GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设GPIO口的输出模式为推免模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置GPIO口的输出时钟为50MHzGPIO_Init(GPIO_LED, &GPIO_InitStructure); //初始化LED灯所使用的管脚GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);//置所有控制LED 的GPIO口管脚为高电平,关闭所有LED灯while(1){GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);//置所有控制LED的GPIO口管脚为高电平,关闭所有LED灯Turn_On_LED(count%4);//点亮一个LED灯count++;Delay(0x2FFFFF);}}void Turn_On_LED(u8 LED_NUM){switch(LED_NUM){case 0:GPIO_ResetBits(GPIO_LED,DS1_PIN); //点亮DS1灯break;case 1:GPIO_ResetBits(GPIO_LED,DS2_PIN); //点亮DS2灯break;case 2:GPIO_ResetBits(GPIO_LED,DS3_PIN); //点亮DS3灯break;case 3:GPIO_ResetBits(GPIO_LED,DS4_PIN); //点亮DS4灯break;default:GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); //点亮所有的灯break;}}void Delay(vu32 nCount){while(nCount--);}。
基于单片机心形流水灯C语言源程序精编
基于单片机心形流水灯C语言源程序精编Document number:WTT-LKK-GBB-08921-EIGG-22986#include<>unsigned int x,y;void delayms(unsigned int z) //延时{unsigned int i,j;for(i=z;i>0;i--)for(j=150;j>0;j--);}void On_all() //开启所有灯{P0=0x00; P1=0x00; P2=0x00; P3=0x00; }void Off_all()//关闭所有灯{P0=0xff; P1=0xff; P2=0xff; P3=0xff; }void ls()//正向流水灯{P0=0x00; delayms(400);P2=0x00; delayms(400);P3=0x00; delayms(400);P1=0x00; delayms(400);P0=0x01; delayms(50);P0=0x02; delayms(50);P0=0x04; delayms(50);P0=0x08; delayms(50);P0=0x10; delayms(50);P0=0x20; delayms(50);P0=0x40; delayms(50);P0=0x80; delayms(50);P0=0x00;P2=0x01; delayms(50);P2=0x04; delayms(50); P2=0x08; delayms(50);P2=0x10; delayms(50); P2=0x20; delayms(50);P2=0x40; delayms(50); P2=0x80; delayms(50);P2=0x00;P3=0x80; delayms(50);P3=0x40; delayms(50); P3=0x20; delayms(50);P3=0x10; delayms(50);P3=0x08; delayms(50); P3=0x04; delayms(50);P3=0x02; delayms(50); P3=0x01; delayms(50); P3=0x00;P1=0x80; delayms(50);P1=0x40; delayms(50);P1=0x20; delayms(50); P1=0x10; delayms(50);P1=0x08; delayms(50); P1=0x04; delayms(50);P1=0x02; delayms(50); P1=0x01; delayms(50); P1=0x00;Off_all();P0=0xfe; delayms(50);P0=0xfd; delayms(50);P0=0xfb; delayms(50); P0=0xf7; delayms(50); P0=0xef; delayms(50); P0=0xdf; delayms(50);P0=0x7f; delayms(50);P0=0xff;P2=0xfe; delayms(50);P2=0xfd; delayms(50);P2=0xfb; delayms(50);P2=0xf7; delayms(50);P2=0xef; delayms(50);P2=0xdf; delayms(50);P2=0xbf; delayms(50);P2=0x7f; delayms(50); P2=0xff;P3=0x7f; delayms(50);P3=0xbf; delayms(50);P3=0xdf; delayms(50);P3=0xef; delayms(50);P3=0xf7; delayms(50);P3=0xfb; delayms(50);P3=0xfd; delayms(50);P3=0xfe; delayms(50);P3=0xff;P1=0x7f; delayms(50);P1=0xbf; delayms(50);P1=0xdf; delayms(50);P1=0xef; delayms(50);P1=0xf7; delayms(50);P1=0xfb; delayms(50);P1=0xfd; delayms(50);P1=0xfe; delayms(50);P1=0xff;P0=0xfe; delayms(50);P0=0xfc; delayms(50);P0=0xf8; delayms(50);P0=0xf0; delayms(50);P0=0xe0; delayms(50);P0=0xc0; delayms(50);P0=0x80; delayms(50);P0=0x00; delayms(50);P2=0xfe; delayms(50);P2=0xfc; delayms(50);P2=0xf8; delayms(50);P2=0xf0; delayms(50);P2=0xe0; delayms(50);P2=0xc0; delayms(50);P2=0x80; delayms(50);P2=0x00; delayms(50);P3=0x7f; delayms(50);P3=0x3f; delayms(50);P3=0x1f; delayms(50);P3=0x0f; delayms(50);P3=0x07; delayms(50);P3=0x03; delayms(50);P3=0x01; delayms(50);P3=0x00; delayms(50);P1=0x7f; delayms(50);P1=0x3f; delayms(50);P1=0x1f; delayms(50);P1=0x0f; delayms(50);P1=0x07; delayms(50);P1=0x03; delayms(50);P1=0x01; delayms(50);P1=0x00; delayms(50);}void fan_ls()//反向流水灯{Off_all(); delayms(300);On_all(); delayms(300); Off_all(); delayms(300); P1=0x00;delayms(400);P3=0x00;delayms(400);P2=0x00;delayms(400);P0=0x00;delayms(400); P1=0x01;delayms(50);P1=0x02;delayms(50);P1=0x04;delayms(50);P1=0x08;delayms(50);P1=0x10;delayms(50);P1=0x20;delayms(50);P1=0x40;delayms(50);P1=0x80;delayms(50);P1=0x00;P3=0x01;delayms(50);P3=0x02;delayms(50);P3=0x04;delayms(50);P3=0x08;delayms(50);P3=0x10;delayms(50);P3=0x20;delayms(50);P3=0x40;delayms(50);P3=0x80;delayms(50);P3=0x00;P2=0x80;delayms(50);P2=0x40;delayms(50);P2=0x20;delayms(50);P2=0x10;delayms(50);P2=0x08;delayms(50);P2=0x04;delayms(50);P2=0x02;delayms(50);P2=0x01;delayms(50);P2=0x00;P0=0x80;delayms(50);P0=0x40;delayms(50);P0=0x20;delayms(50);P0=0x10;delayms(50);P0=0x08;delayms(50);P0=0x04;delayms(50); P0=0x02;delayms(50);P0=0x01;delayms(50);P0=0x00;Off_all();P1=0xfe; delayms(50);P1=0xfd; delayms(50);P1=0xfb; delayms(50); P1=0xf7; delayms(50); P1=0xef; delayms(50); P1=0xdf; delayms(50); P1=0xbf; delayms(50); P1=0x7f; delayms(50);P1=0xff;P3=0xfe; delayms(50);P3=0xfd; delayms(50);P3=0xfb; delayms(50); P3=0xf7; delayms(50); P3=0xef; delayms(50); P3=0xdf; delayms(50); P3=0xbf; delayms(50); P3=0x7f; delayms(50);P3=0xff;P2=0x7f; delayms(50);P2=0xbf; delayms(50); P2=0xdf; delayms(50);P2=0xef; delayms(50); P2=0xf7; delayms(50);P2=0xfb; delayms(50); P2=0xfd; delayms(50); P2=0xfe; delayms(50);P2=0xff;P0=0x7f; delayms(50);P0=0xbf; delayms(50);P0=0xdf; delayms(50);P0=0xef; delayms(50);P0=0xf7; delayms(50);P0=0xfb; delayms(50); P0=0xfd; delayms(50); P0=0xfe; delayms(50);P0=0xff;P1=0xfe; delayms(50);P1=0xfc; delayms(50);P1=0xf8; delayms(50);P1=0xf0; delayms(50);P1=0xe0; delayms(50);P1=0xc0; delayms(50); P1=0x80; delayms(50); P1=0x00; delayms(50);P3=0xfe; delayms(50);P3=0xfc; delayms(50);P3=0xf8; delayms(50);P3=0xf0; delayms(50);P3=0xe0; delayms(50);P3=0xc0; delayms(50); P3=0x80; delayms(50); P3=0x00; delayms(50);P2=0x7f; delayms(50);P2=0x3f; delayms(50);P2=0x1f; delayms(50);P2=0x0f; delayms(50);P2=0x07; delayms(50);P2=0x03; delayms(50);P2=0x01; delayms(50);P2=0x00; delayms(50);P0=0x7f; delayms(50);P0=0x3f; delayms(50);P0=0x1f; delayms(50);P0=0x0f; delayms(50);P0=0x07; delayms(50);P0=0x03; delayms(50);P0=0x01; delayms(50);P0=0x00; delayms(50);Off_all();On_all();Off_all();On_all();Off_all();}void ban_shan()//半边交替闪{Off_all();P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;d elayms(50);P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;d elayms(50);P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;d elayms(50);P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;d elayms(50);P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;d elayms(50);P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;d elayms(50);P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;d elayms(50);P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;d elayms(50);P1=0x00;P3=0x00;delayms(50);P0=0xff;P2=0xff;d elayms(50);P1=0xff;P3=0xff;delayms(50);P0=0x00;P2=0x00;d elayms(50);}void shangxia_shan()//上下交替闪{On_all();Off_all();P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;d elayms(50);P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;d elayms(50);P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;d elayms(50);P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;d elayms(50);P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;d elayms(50);P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;d elayms(50);P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;d elayms(50);P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;d elayms(50);P0=0x00;P1=0x00;delayms(50);P2=0xff;P3=0xff;d elayms(50);P0=0xff;P1=0xff;delayms(50);P2=0x00;P3=0x00;d elayms(50);}void huayang_shan()//花样闪烁{On_all();delayms(400);P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200);P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200);P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200);P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200);P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200);P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200);On_all();delayms(400);P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200);P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200);P0=0xff;P2=0x00;P3=0x00;P1=0x00;delayms(200);P0=0x00;P2=0xff;P3=0x00;P1=0x00;delayms(200);P0=0x00;P2=0x00;P3=0xff;P1=0x00;delayms(200);P0=0x00;P2=0x00;P3=0x00;P1=0xff;delayms(200);On_all();delayms(400);Off_all();delayms(400);P0=0x00;delayms(200);P3=0x00;delayms(200);P1=0x00;delayms(200);P2=0x00;delayms(200);On_all();delayms(400);Off_all();delayms(400);P1=0x00;delayms(200);P2=0x00;delayms(200);P0=0x00;delayms(200);P3=0x00;delayms(200);On_all();delayms(400);Off_all();delayms(50);On_all();delayms(50);Off_all();delayms(50);On_all();delayms(50);Off_all();delayms(50);}void main(){On_all(); delayms(300);Off_all(); delayms(300);On_all(); delayms(300);Off_all(); delayms(300);On_all(); delayms(300);Off_all(); delayms(300);ls(); //正向流水fan_ls(); //反向流水ban_shan(); //半边交替闪shangxia_shan(); //上下交替闪烁huayang_shan();// 花样闪烁}。
流水灯C语言程序
流水灯C语言程序流水灯是一种常见的电子显示效果,通常用于展示灯光的流动效果。
在C语言中,我们可以通过控制单片机的IO口来实现流水灯的效果。
以下是一个标准格式的C语言程序,用于实现流水灯效果。
```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define LED_COUNT 8 // 流水灯的数量#define DELAY_MS 500 // 每一个灯亮起的延迟时间(毫秒)int main() {int leds[LED_COUNT] = {0}; // 存储每一个灯的状态,0表示灭,1表示亮 int i, j;while (1) {// 灯往右挪移for (i = LED_COUNT - 1; i > 0; i--) {leds[i] = leds[i - 1];}leds[0] = 1;// 输出灯的状态for (i = 0; i < LED_COUNT; i++) {if (leds[i]) {printf("*"); // 亮的灯用*表示} else {printf(" "); // 灭的灯用空格表示}}printf("\n");// 延迟一段时间usleep(DELAY_MS * 1000);// 清空屏幕system("clear");}return 0;}```上述程序使用了C语言的基本语法和系统函数,实现了一个简单的流水灯效果。
程序中的`LED_COUNT`表示流水灯的数量,可以根据实际需求进行调整。
`DELAY_MS`表示每一个灯亮起的延迟时间,单位为毫秒。
在程序的主循环中,通过不断改变灯的状态和输出屏幕,实现了流水灯的效果。
首先,灯往右挪移,即将前一个灯的状态赋值给后一个灯,最后一个灯的状态设置为亮。
单片机C语言流水灯
/*循环体*/
}
循环结构
循环结构及其流程图
“直到”(do„while)型循
环结构
先执行操作A,再判断条件P, 若P为真时则再次执行A,反 复执行直到P为假为止。
do-while语句格式:
do
{ 语句;
}
/*循环体*/
while ( 表达式 ) ;
循环语句
for循环语句格式:
软件
//LEDshift .c :LED流水灯程序 #include <reg51.h> sbit LED_CS=P1^4; //定义LED控制端为P1.4 //延时程序:由 Delay参数确定延迟时间 void mDelay(unsigned int Delay) { unsigned int i; for(;Delay>0;Delay--) { for(i=0; i<114; i++) {;} } } void main() { unsigned char OutData=0xfe; for( ; ;) { LED_CS=0; //LED控制端有效 P0=OutData; OutData=~(~OutData<<1); //循环左移 mDelay(1000); /*延时 1000 毫秒*/ } }
D0
78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00
RAM 位 寻 址 区 位 地 址 表
MCS-51单片机存储器结构
特殊功能寄存器/专用寄存器SFR(80H-FFH)
21个SFR, 分别用于以下各个功能单元:
CPU:ACC、B、PSW、SP、
几种流水灯程序
几种流水灯程序1. 基础流水灯程序:用来控制1个led灯,使其呈现流水灯的效果,代码如下: int led = 13; // 让led连接到电路的13号引脚void setup(){pinMode(led, OUTPUT); // 设置13号引脚的模式为输出}void loop(){digitalWrite(led, HIGH); // 让led灯亮起来delay(1000); // 等待1秒digitalWrite(led, LOW); // 让led灯熄灭int led1 = 13;int led2 = 12;int led3= 11;int led4 = 10;void setup (){pinMode (led1, OUTPUT);pinMode (led2, OUTPUT);pinMode (led3, OUTPUT);pinMode (led4, OUTPUT);}void loop (){digitalWrite (led1, HIGH);delay (500);digitalWrite (led1, LOW);digitalWrite (led2, HIGH);delay (500);digitalWrite (led2, LOW);digitalWrite (led3, HIGH);delay (500);digitalWrite (led3, LOW);digitalWrite (led4, HIGH);delay (500);digitalWrite (led4, LOW);delay (1000);}3.调节速度的流水灯程序:将第一个流水灯程序增加一个模拟变量,使得可以即时调节灯泡亮度以及闪烁速度,以及可以控制单个led灯或多个led灯,其代码如下:4.设置模式的流水灯程序:将流水灯程序改进,使得应用于不同的场景,可以调节闪烁模式,如快速,慢速,长亮等,其代码如下:。
单片机流水灯c语言实现
//------------------------------------------------
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE []=
red_a=1;yellow_a=1;green_a=0;
red_b=0;yellow_b=1;green_b=1;
delayMs(2000);
Operation_Type=2;
break;
case 2://东西向黄灯开始闪烁,绿灯关闭
delayMs(300);
yellow_a=!yellow_a; green_a=1;
while(x--)
{
for(i=0;i<120;i++);
}
}
//---------------------------------------------
//交通灯切换子程序
void Traffic_Light()
{
switch (Operation_Type)
{
case 1://东西向绿灯亮与南北向红灯亮
{
uchar i;
P2=0x01;//P2端口初始化
while(1)//死循环
{
for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句
{
P2=_crol_(P2,1);//P2端口循环左移1位
delayMs(150);
}
for(i=0;i<7;i++)
《单片机C语言程序设计及仿真》教学设计项目三 流水灯的制作与实现
项目三流水灯的制作与实现教学设计任务(课题)名称任务1 点亮发光二极管授课班级课型理实一体化课时 4 授课时间任务(教学内容)描述本任务主要学习简单C语言程序结构;利用位定义方式点亮发光二极管的方法;编写、调试和仿真“点亮发光二极管”C程序。
教学目标知识目标学会分析电路的方法;理解简单C程序的结构;理解位操作的应用;能力目标会利用keil软件编写C程序;会利用Proteus软件仿真调试C程序;情感态度与价值观目标培养学生自主讨论学习的能力;教学重难点重点C程序的结构;程序调试仿真难点C程序的结构;教学方法讲授法、分组讨论教学资源多媒体教学设备、PPT、EDA仿真机房教学过程教学环节教学内容知识点与技能点一、布置任务任务描述单片机P0.0端口连接一个发光二极管D1,编写程序点亮D1。
二、新课讲解1.发光二极管简介发光二极管,俗称LED,是由半导体砷、磷、镓及其化合物制成的二极管,它不仅具有单向导电性,而且通电后能发出红、黄、绿等鲜艳的色光,它工作时只需加1.5-3V正向电压和几毫安电流就能正常发光,在使用需串联一个限流电阻。
它体积小、反应快、价廉并且工作可靠,广泛应用于各种指示电路当中。
2.单片机常用术语●位(Bit)位是指一个二进制位,它是计算机中所能表示的最小数据单位。
用b表示。
●字节(Byte)由8位二进制数构成。
●字(Word)及字长若干个字节定义一个字。
一个字所包含的二进制位数称为字长,字用W表示。
一般微机中定义一个字长为2个字节。
●常量在程序执行过程中,其值不发生改变的量称为常量。
●变量在程序执行过程中,取值可变是量称为变量。
3.头文件调用头文件的格式:#include<>格式:引用标准头文件,编译器从标准库目录开始搜索。
#include””格式:引用非标准头文件,编译器从用户的工作目录开始搜索。
4.位定义sbitsbit:表示位的意思,它是非标准C语言的关键字,编写程序时如需操作寄存器中的某一位时,需定义一个位变量,此时需要用到sbit,如D1=P0^0;,EA=0xaf;5.C语言编程的基本语法和格式要求(1)括号的用法C语言中常用的4种括号。
stc89c51单片机流水灯程序
51单片机流水灯程序程序一(用C语言编的最基础的程序)#include<reg52."h>#include<stdio.h>sbit D0=P1^0;//位定义,把P1口的第一个管脚定义为D0 sbit D1=P1^1;//位定义,把P1口的第二个管脚定义为D1 sbit D2=P1^2;//位定义,把P1口的第3个管脚定义为D2 sbit D3=P1^3;//位定义,把P1口的第4个管脚定义为D3 sbit D4=P1^4;//位定义,把P1口的第5个管脚定义为D4 sbit D5=P1^5;//位定义,把P1口的第6个管脚定义为D5 sbit D6=P1^6;//位定义,把P1口的第7个管脚定义为D6 sbit D7=P1^7;//位定义,把P1口的第8个管脚定义为D7 void main(){while(1)//建立大的死循环。
{unsigned int i,j;D0=0,D7=1;//亮灯1,关灯8for(i=50;i>0;i--)for(j=200;j>0;j--);//两个FOR组成的延时D0=1,D1=0;//亮灯2,关灯1for(i=50;i>0;i--)for(j=200;j>0;j--);D1=1,D2=0;for(i=50;i>0;i--)for(j=200;j>0;j--);D2=1,D3=0;for(i=50;i>0;i--)for(j=200;j>0;j--);D3=1,D4=0;for(i=50;i>0;i--)for(j=200;j>0;j--);D4=1,D5=0;for(i=50;i>0;i--)for(j=200;j>0;j--);D5=1,D6=0;for(i=50;i>0;i--)for(j=200;j>0;j--);D6=1,D7=0;for(i=50;i>0;i--)for(j=200;j>0;j--);}}程序二(用swich case语句编的)#include<reg52."h>//51单片机的头文件。
嵌入式流水灯c语言代码
流水灯实验1.实验内容使用GPIO口控制8个LED流水灯显示。
2.实验步骤①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程LedDisp_C。
②在user组里编写主程序代码main.c。
③选用DebugInRam生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的P1.[18:25]管脚对应与LED[1:8]跳线短接。
⑤选择Project->Debug,启动AXD进行JTAG仿真调试。
3.实验参考程序程序清单错误!文档中没有指定样式的文字。
-1 GPIO输出控制实验2的参考程序#include "config.h"/* LED8~LED1 8个LED分别由P1.25~P1.18控制*/const uint32 LEDS8=(0XFF<<18); //p1[25:18]控制LED8~LED1低电平点亮/********************************************************************函数DelayNS()进行长软件延时*********************************************************************/void DelayNS(uint32 dly){uint32 i;for(;dly>0;dly--)for(i=0;i<50000;i++);}const uint32 LED_TBL[]={0X00,0XFF, //全部熄灭后,点亮0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80, //逐次逐个点亮0X01,0X03,0X07,0X0F,0X1F,0X3F,0X7F,0XFF, //逐次逐个叠加0XFF,0X7F,0X3F,0X1F,0X0F,0X07,0X03,0X01, //逐次逐个递减0X81,0X42,0X24,0X18,0X18,0X24,0X42,0X81, //两个靠拢后分开0X81,0XC3,0XE7,0XFF,0XFF,0XE7,0XC3,0X81 //两边叠加后递减};int main (void){ uint8 i;PINSEL2=PINSEL2&(~0X08); //p1[25:16]链接GPIOIO1DIR=LEDS8; //设置为LED输出口while(1){ for(i=0;i<42;i++){IO1SET=~((LED_TBL[i])<<18);DelayNS(20);IO1CLR=((LED_TBL[i])<<18);DelayNS(20);}}return 0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
}
}
3\
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //配置输出,控制LED
rGPBUP =0x7ff; //0011 1111 1111 不用上拉寄存器 即11位全置1
while(1)
{
for(j=0;j<4;j++)
{
}
}
5\
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
******************************************************************/
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
int main (void)
{
int i,j;
int *p;
int shu[]={0x1df,0x3be,0x77c,0xef8};
p=shu;
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10))); //0011 清零
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //配置输出,控制LED
while(1)
{
dat=0x1df; // 0001 1101 1111
for(j=0;j<4;j++)
{
for(i=0;i<300000;i++);
rGPBDAT=shu[j];
}
}
}
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10))); //0011 清零
int main (void)
{
int i,j;
int dat;
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10))); //0011 清零
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //配置输出,控制LED
rGPBUP =0x7ff; //0011 1111 1111 不用上拉寄存器 即11位全置1
while(1)
{
for(j=0;j<4;j++)
{
for(i=0;i<300000;i++);
rGPBDAT=(*p);
p++;
} p=shu;
1\
/****************************************************************************
*****信盈达电子技术服务有限公司
*****模块名:Blinky.c
*****功 能:GPIO跑马灯测试程序
*****说 明: 4个LED分别接在GPB5~GPB5上
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
int main (void)
{
int i,j;
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10))); //0011 清零
rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10))); //0011 清零
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //配置输出,控制LED
rGPBUP =0x7ff; //0011 1111 1111 不用上拉寄存器 即11位全置1
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
/*****************************************************************************
rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //配置输出,控制LED
rGPBUP =0x7ff; //0011 1111 1111 不用上拉寄存器 即11位全置1
while(1)
{
for(j=0;j<4;j++)
{
4\
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
rGPBUP =0x7ff; //0011 1111 1111 不用上拉寄存器 即11位全置1
while(1)
{
dat=0x1df; // 0001 1101 1111
for(j=0;j<4;j++)
{
for(i=0;i<300000;i++);
rGPBDAT=dat;
dat<<=1;
}
}
}
2\
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
*****函数名:main()
*****功 能:主程序GPIO跑马灯测试程序
*****说 明: 4个LED分别接在GPB5~GPB5上
*****************************************************************************/
for(i=0;i<300000;i++);
switch(j)
{
case 0 :rGPBDAT=0x1df;break;
case 1 :rGPBDAT=0x3be;break;
case 2 :rGPBDAT=0x77c;break;
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
int main (void)
{
int i,j;
int dat;
int shu[]={0x1df,0x3be,0x77c,0xef8};
for(i=0;i<300000;i++);
if(j==0)rGPBDAT=0x1df;
if(j==1)rGPBDAT=0x3be;
if(j==2)rGPBDAT=0x77c;
if(j==3)rGPBDAT=0xef8;
}
}
}