嵌入式流水灯c语言代码

合集下载

#stcc单片机流水灯程序

#stcc单片机流水灯程序

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。

嵌入式流水灯c语言代码

嵌入式流水灯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;}。

嵌入式实验 流水灯

嵌入式实验 流水灯

#include "config.h"# define LED1 1 << 17 /* P0.17控制LED1 */# define LED2 1 << 18 /* P0.18控制LED2 */# define LED3 1 << 19 /* P0.19控制LED3 */# define LED4 1 << 20 /* P0.20控制LED4 *//****************************************************************************** ***************************** Function name: DelayNS** Descriptions: 延时函数** input parameters: uiDly 值越大,延时时间越长** output parameters: 无** Returned value: 无******************************************************************************* **************************/void DelayNS (uint32 uiDly){uint32 i;for (; uiDly > 0; uiDly--){for(i = 0; i < 50000; i++);}}/****************************************************************************** ***************************** Function name: main** Descriptions: 跳线JP4短接,LED1闪烁** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/int main (void){PINSEL1 = PINSEL1 & (~(0x03 << 2)); /* 将P0.17设置为GPIO *//* 将P0.20设置为GPIO */ IO0DIR = LED1; /* 设置LED控制口为输出*/IO0SET = LED1; /* LED1熄灭*/while (1) {IO0DIR = LED1; /* 设置LED控制口为输出*/IO0SET = LED1; /* LED1熄灭*/IO0SET = LED1; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED1; /* LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED2; /* 设置LED控制口为输出*/IO0SET = LED2; /* LED1熄灭*/IO0SET = LED2; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED2; /* LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED3; /* 设置LED控制口为输出*/IO0SET = LED3; /* LED1熄灭*/IO0SET = LED3; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED3; /*LED1点亮*/DelayNS(50); /* 延时*/IO0DIR = LED4; /* 设置LED控制口为输出*/IO0SET = LED4; /* LED1熄灭*/IO0SET = LED4; /* LED1熄灭*/DelayNS(50); /* 延时*/IO0CLR = LED4; /* LED1点亮*/DelayNS(50); /* 延时*/}return 0;}/****************************************************************************** ***************************** End Of File******************************************************************************* ***************************/。

嵌入式STM32程序编写基本流程(LED流水灯)

嵌入式STM32程序编写基本流程(LED流水灯)

嵌⼊式STM32程序编写基本流程(LED流⽔灯)LED流⽔灯程序初始化流程[cpp]1. //1.定义结构体变量2. GPIO_InitTypeDef GPIO_InitStructure;3. //2.开启GPIOC的外部时钟,不同的外设开启不同的时钟,IO⼝复⽤时两个时钟都要开启。

stmf10x_rcc.h4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);5. //3.设置要控制的GPIO管脚6. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;7. //4.设置管脚模式,推挽输出8. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;9. //5.设置GPIOC的引脚速度为50MHz10. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;11. //6.调⽤库函数初始化GPIOC,初始化IO⼝12. GPIO_Init(GPIOC,&GPIO_InitStructure);13. //7.关闭所有LED等灯,GPIO_ResetBits(,);GPIO_SetBits(,);置位和清0函数14. GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);寄存器⽅式[cpp]1. GPIO_TypeDef * GPIOx;2. GPI0x=GPIOA;3. //开启GPIOA外设时钟4. GPIOx->APB2ENR|=1<<2;5. //配置GPIOA.3 4 5为推挽输出50MHZ6. GPIOx->CRL|=0X03<<12|0X03<<16|0X03<<20;7. //GPIOA.3 4 5输出0xff。

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机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语言流水灯程序

基于51单片机的C语言流水灯程序

基于51单片机的C语言流水灯程序#include //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void delay(uint); //声明延时函数void main(){uint i;uchar temp;while(1){temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动{P2=~temp;delay(500); //调用延时函数temp<<=1;}temp=0x80;for(i=0;i<8;i++) //8个流水灯反向逐个闪动{P2=~temp;delay(500); //调用延时函数temp>>=1;}temp=0xFE;for(i=0;i<8;i++) //8个流水灯依次全部点亮{P2=temp;delay(500); //调用延时函数temp<<=1;}temp=0x7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮{P2=temp;delay(500); //调用延时函数temp>>=1;}}}void delay(uint a) //延时函数,毫秒级别{uint i;while(--a!=0) //执行空操作循环,其中a为形参,由调用该函数的函数语句提供值{for(i=0;i<125;i++);//执行当0加到125时,大约会用掉1ms 的时间}}。

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序流水灯最原始下面是一个最基本的流水灯程序,使用了51单片机的寄存器编程方法。

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;void mdelay(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;流水灯位左移在流水灯的基础上,我们可以通过左移位的方式来实现流水灯的效果。

void main()unsigned char led = 0x01.// 初始化led为xxxxxxxxwhile(1)P1 = ~led。

// 取反输出,因为我们的电路是低电平亮灯mdelay(1000);led <<= 1.// 左移一位if(led == 0) // 如果led变为0了,说明已经左移到最后一位了,需要重新开始led = 0x01;流水灯移位函数为了方便实现流水灯的位移,我们可以封装一个移位函数。

void shift_left(unsigned char *led。

unsigned char n)for(unsigned char i=0.i<n。

i++)led <<= 1;if(*led == 0)led = 0x01;void main()unsigned char led = 0x01;while(1)P1 = ~led;mdelay(1000);shift_left(&led。

流水灯C语言程序

流水灯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语言实现

单片机流水灯c语言实现
//使数字0--9循环显示
//------------------------------------------------
#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编译LED流水灯实验程序

C编译LED流水灯实验程序

//C编译LED流水灯实验程序/*包含头文件*/#include<reg51.h>/* 宏定义*/#define uchar unsigned char#define uint unsigned int/* 延时子程序*/void delay(uint N){while(N!=0) N--;}/*主函数开始*/void main(){uchar a,b;a=0x01; //对变量a赋初始值为1while(1) //进入循环{if(a|0x00) //判断a的值是否为0{b=0x0ff^a; //对a的值与ff异或后赋值给变量bP2=b; //输出b变量的值,点亮相应的LEDa=a<<1; //对a进行左移一位运算delay(50000); //延时,使LED走马效果让人眼可以捕捉到}else //若a的值为0,说明8个LED均依次被点亮{P2=0x0ff; //关闭所有LED等待下次循环a=0x01; //重载a变量的值delay(50000);}}}/*********************************************************C语言编写:串行通信实验,用来测试学习板上的串口是否可用;在测试的时候用线将DB9串行接口RS232中的2脚和3脚短接;用短路卡将J41短接;运行程序后,可以观察LED显示数值的变化,验证程序的正确性**********************************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code tab[16]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df,0x0bf,0x7F}; //LED流水灯字符表void delay(uint v) //通用延时子程序{for(;v>0;v--) ;}main(){uint i;uchar j;TMOD=0x20; //初始化T1TH1=0xCC;TL1=0xCC;TR1=1; //无限循环执行发送和接收语句SCON=0x50;P2=0xFF; //灭P1口所有LEDwhile(j!=8){for(j=0;j<8;j++) //设置显示流水灯的显示循环次数{TI=0;delay(20000);SBUF=tab[j]; //查表得到当前要发送的数据,且通过串口发送出去while(RI==0) ; //RI=0等待串口中断RI=0; //RI=1清RIP2=SBUF; //接收数据并送P1口,LED显示接收到的数据while(TI==0) ;delay(20000); //延时}j=0; //重置参数j计数值}点阵LCD显示实验/*********************************************************************** * LCD.C,液晶操作程序* RS=1--状态,=0--数据* RW=1--读取,=0--写* EN=1--芯片有效,=0--芯片无效***********************************************************************/ /***********************************************************************功能描述:液晶应用程序,人机交互接口*显示参数: outdata,要输出的数据X:表示行数(0-1) Y:表示列数(0-15).x,y均为十六进制**********************************************************************/ #include "reg52.H"#define Lcd_Data P0#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit Lcd_RS=P1^3; //定义引脚sbit Lcd_RW=P1^2;sbit Lcd_EN=P1^1;typedef unsigned char uint8;typedef unsigned int uint16;uint8 code *Str_Display[]={"C","*EZST-51*"," Study&Expold!"};//显示提示内容void Lcd_WriteData(uint8 W_Data); //LCD写数据子程序void Lcd_WriteCmd(uint8 W_Cmd,BusyC); //LCD写指令子程序unsigned char Lcd_WaitBusy(void); //LCD检测忙子程序void Lcd_Init(void); //LCD初始化子程序void Lcd_CLS(void); //LCD清屏子程序void Lcd_Display(uint8 *buff,uint8 x,uint8 y); //在指定的位置显示特定的字符串void Byte_Display(uint8 Byte,uint8 x,uint8 y); //在指定位置显示一个字节的ASCII void Byte_CHG(uint8 Byte,uint8 * Byte_H,uint8 * Byte_L);void Delay5Ms(void);void delay(uint16 N); //通用延时子程序void main(void){Lcd_Init() ; //LCM初始化while(1) //显示提示内容的方式:先在第一行中间位置显示字符“C”;//延时40000MS后、清屏在下一屏第一行显示:*EZST-5X*// 第二行显示:Study&Expold!{Lcd_CLS(); //LCD显示清屏Lcd_Display(Str_Display[0],0,8); //在LCD正中间显示字符“C "delay(60000);Lcd_CLS(); //LCD显示清屏delay(60000);Byte_Display(0x59,1,6); //在LCD第二行显示一个字节的十六进制数59Hdelay(60000);Lcd_CLS();Lcd_Display(Str_Display[1],0,0);Lcd_Display(Str_Display[2],1,0);delay(60000);}}/***********************************************************************功能描述:液晶自定义字符显示子程序*入口参数: outdata--要输出的数据X--表示行数(0-1) Y--表示列数(0-15)x,y均为十六进制.**********************************************************************/void Lcd_Display(uint8 *buff,uint8 x,uint8 y){uint8 i;uint8 ramadd=0x80;if(x) ramadd+=0x40;ramadd+=y;Lcd_WriteCmd(ramadd,1);for(i=0;buff[i]!='\0';i++){ Lcd_WriteData(buff[i]);delay(10000);}}/************************************************************************ 功能描述: 将一个BYTE分离成两个字符,用来显示(如45H-->52H('4')-53H('5')).* 入口参数: BYTE,要分离的字节,BYTE_H,BYTE_L两个指针(返回用BYTE的高低四位) ***********************************************************************/void Byte_CHG(uint8 Byte,uint8 * Byte_H,uint8 * Byte_L){*Byte_L=(Byte&0x0f);if(*Byte_L>9)*Byte_L+=7;*Byte_L+=48;*Byte_H=(Byte&0xf0)>>4;if(*Byte_H>9)*Byte_H+=7;*Byte_H+=48;}/************************************************************************ 功能描述: 在指定位置显示一个字节的ASCII* 入口参数: BYTE,要显示的字节;(x,y)在LCD中的坐标***********************************************************************/void Byte_Display(uint8 Byte,uint8 x,uint8 y){uint8 Byte_H,Byte_L,End_H='H';Byte_CHG(Byte,&Byte_H,&Byte_L);Lcd_Display(&Byte_H,x,y);Lcd_Display(&Byte_L,x,y+1);Lcd_Display(&End_H,x,y+2);}//通用延时子程序void delay(uint16 N){for(;N>0;N--);}//-------------------------------------//LCD写数据子程序void Lcd_WriteData(uint8 W_Data){Lcd_WaitBusy(); //检测忙Lcd_Data = W_Data;Lcd_RS = 1;Lcd_RW = 0;Lcd_EN = 0; //若晶振速度太高可以在这后加小的延时Lcd_EN = 1;Lcd_EN = 0;}//LCD写指令子程序void Lcd_WriteCmd(uint8 W_Cmd,BusyC) //BusyC为0时忽略忙检测{if (BusyC) Lcd_WaitBusy(); //根据需要检测忙Lcd_Data = W_Cmd;Lcd_RS = 0;Lcd_RW = 0;Lcd_EN = 0;Lcd_EN = 1;Lcd_EN = 0;}//LCD检测忙子程序uint8 Lcd_WaitBusy(void){Lcd_Data = 0xFF;Lcd_RS = 0;Lcd_RW = 1;Lcd_EN = 0;Lcd_EN = 1;Lcd_EN = 1;while (Lcd_Data & Busy); //检测忙信号Lcd_EN = 0;return(Lcd_Data); //若不处于忙状态显示字符}//LCD清屏子程序void Lcd_CLS(void){Delay5Ms();Delay5Ms();Lcd_WriteCmd(0x38,1); //显示模式设置,开始要求每次检测忙信号Lcd_WriteCmd(0x08,1); //关闭显示Lcd_WriteCmd(0x01,1); //显示清屏Lcd_WriteCmd(0x06,1); // 显示光标移动设置Lcd_WriteCmd(0x0C,1); // 显示开及光标设置}//LCD初始化子程序void Lcd_Init(void) //LCM初始化{ delay(4000);Lcd_WriteCmd(0x38,0); //显示模式设置,不检测忙信号Delay5Ms();Delay5Ms();Lcd_WriteCmd(0x38,1); //显示模式设置,开始要求每次检测忙信号Lcd_WriteCmd(0x08,1); //关闭显示Lcd_WriteCmd(0x01,1); //显示清屏Lcd_WriteCmd(0x06,1); // 显示光标移动设置Lcd_WriteCmd(0x0C,1); // 显示开及光标设置}//5ms延时void Delay5Ms(void){uint8 i=5552;while(i--);}电压采集(ADC0809)实验#include "reg52.h"typedef unsigned char BYTE;typedef unsigned int WORD;sbit ADC0809_CS=P3^5;sbit ADC0809_EOC=P3^3;sbit SMG_EN1=P1^3;sbit SMG_EN2=P1^2;sbit SMG_EN3=P1^1;sbit SMG_EN4=P1^0;#define SMG_DA TA P0// 字形表, 为0亮// a_// f|_|b// e|_|c .p// d// 00001101//0 1 2 3 4 5 6 7 8 9 A B C D E Funsigned char code SMG_TABLE[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/* Function */void Delay_10us(WORD n);void SMG_Display(BYTE S MGNum, BYTE tdata);/*********************************************************************** main()/*********************************************************************/void main(void){BYTE rdata=0,i=0;BYTE BCD_H=0,BCD_L=0;BYTE xdata * ptr;float result=0;int temp;while(1){ADC0809_CS=0;*ptr=0xff;i=200;while(ADC0809_EOC && (i>0))i--;rdata=*ptr;ADC0809_CS=1;BCD_H=(rdata>>4)&0x0f; //get the high half BYTEBCD_L=rdata&0x0f; //get the low half BYTESMG_Display(1,BCD_H);SMG_Display(2,BCD_L);/*// 显示十进制数据result=5*rdata/256.0;temp=(int)(10*result+0.5);BCD_H=temp/10;BCD_L=temp%10;SMG_Display(3,BCD_H);SMG_Display(4,BCD_L);*/}}// write the tdata to the SMGNumvoid SMG_Display(BYTE S MGNum, BYTE tdata){switch(SMGNum){case 1:SMG_EN1=0;break;case 2:SMG_EN2=0;break;case 3:SMG_EN3=0;break;case 4:SMG_EN4=0;break;default:break;}SMG_DA TA=S MG_TABLE[tdata];Delay_10us(100);SMG_EN1=1;S MG_EN2=1;SMG_EN3=1;SMG_EN4=1;}// delay_ms(WORD n), default use 12M XTAL,others should be modifed.void Delay_10us(WORD n){BYTE i=0;for(;n>0;n--)for(i=0;i<10;i++);}定时-计数器实验TIMER+LED.C.c/*C语言编译——定时计数器当定时器用实验分析:采用T1完成定时,每隔一段时间,发光二极管左移一次;*/#include <reg51.h>#define uint unsigned int#define uchar unsigned charvoid main(){uint i; //设置i为中间变量i=0x01;P2=0xff; //灭P2口所有二极管TMOD=0x10; //设置定时器1方式1EA=1;ET1=1;TR1=1;for(;;){TH1=0x00; //装载计数初值TL1=0x01;do{}while(!TF1); //查询等待TF1置位if(i<0x81) //判断变量i是否垒加八次,若已经垒加八次,则置i初始值0x01{ // 若为垒加八次,则继续循环P2=i^0xff;i<<=1;}elsei=0x01;TF1=0; //软件清TF1}}CONT+SMG.C.txt蜂鸣器发声控制实验/* 文件名:C语言编译蜂鸣器发声实验功能:学习I/O的基本操作,控制蜂鸣器的发声。

实验2 流水灯控制的C语言实现

实验2 流水灯控制的C语言实现

实验2 流水灯控制的C语言实现一、实验目的1、应用PROTEUS仿真工具软件绘制硬件连接图2、使用Keil C 完成程序的编写和调试3、初步了解C51程序的编写与调试二、实验内容本任务就是在单片机电路板上安装电路,以P1作为输出口,控制8个LED灯(可发红、绿或黄光),模拟流水灯控制。

三、实验电路原理图图4-1 流水灯控制电路原理图四、实验步骤1、在PROTEUS中画好电路原理图。

2、在KEIL中编写流水灯控制的程序。

编好后调试产生HEX文件。

编程要求如下:状态1:8个LED,从左到右逐个点亮,状态2:8个LED,从右到左逐个点亮,状态3:8个LED,从左到右依次点亮,状态4:8个LED,从右到左依次熄灭。

转至状态1循环该程序对应的流程图如图4-2所示。

3、将HEX文件写入电路图中的单片机,仿真出流水灯控制的现象。

五、实验源代码1、汇编程序:ORG 0000HLJMP MAINORG 0040HMAIN: MOV SP,#60HLOOP1:MOV R0,#8; R0=8MOV A,#0FEH;A=1111_1110LP1: MOV P1,A; P1=1111_1110MOV R3,#5; R3=101LCALL DELAY; 调用延时函数RL A; 将A循环左移DJNZ R0,LP1; 将R0-1->R0,如果R0!=0,则循环LOOP2:MOV R0,#8MOV A,#7FHLP2: MOV P1,A____________________________________________LOOP3:MOV R0,#8MOV A,#0FEHLP3: MOV P1,AMOV R3,#5________________________________________________LOOP4:MOV R0,#8MOV A,#80HLP4: MOV P1,AMOV R3,#5LCALL DELAYSETB CRRC ADJNZ R0,LP4LJMP LOOP1DELAY: MOV R2,#0FFH ; 延时子程序R2=255 DELAY1: MOV R1,#0C3H ;R1=12x16+3=195_______________________________________RETEND2、C51程序:#include<reg51.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint n) /*1ms延时函数*/{ uint k,j;for(k=0;k<n;k++)for(j=0;j<121;j++);}main(){ uchar i;uint aa;while(1){ aa=0xfe;//aa=1111_1110for(i=0;i<8;i++){P1=aa;//P1=1111_1110delay(500);aa=(aa<<1)|0x01;//aa=1111_1100 | 0000_0001=1111_1101}aa=0x7f;//aa=0111_1111for(i=0;i<8;i++){P1=aa;delay(500);aa=(aa>>1)|0x80;//aa=1011_1111}aa=0xfe;//aa=1111_1110for(i=0;i<8;i++){P1=aa;delay(500);aa=aa<<1;//aa=1111_1100}aa=0x80;//aa=1000_0000for(i=0;i<8;i++){P1=aa;delay(500);aa=(aa>>1)|0x80;aa=1100_0000}}}图4-2 程序流程图。

嵌入式之开关控制流水灯

嵌入式之开关控制流水灯
Main.c程序代码如下:
#include "key.h"
#include "ledflow.h"
void Board_Init(void)
{
Key_Init();
Led_Init();
}
intMain()
{
Board_Init();
while(1)
{
switch(Key_Scan())
{
case 1:Led1_On();break;
#define KEY3 (0 << 4)
#define KEY4 (0 << 0)
extern void Key_Init() ;
extern int Key_Scan() ;
#endif
Ledflow.c程序代码如下:
#include "ledflow.h"
#include "2440addr.h"
}
Common.h程序代码如下:
#ifndef __COMMON_H__
#define __COMMON_H__
extern void Delay(void);
#endif
现在主程序中加入两个头文件依次是#include "common.h"
#include "beep.h"然后在void Board_Init(void )中加入Beep_Init();在Led1_on后面加上Beep_on();Led2_on后面加上Beep_on();一直加到Led4_on后面
#define Beep_Off() {rGPBDAT &= ~(1 << 0);}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水灯实验
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]链接GPIO
IO1DIR=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;
}。

相关文档
最新文档