花式流水灯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.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。
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灯呼吸的间隔长短,数值越⼩,间隔越短。
花样流水灯程序
}
{
time=0;
miao++;
miao=miao%10;//0-9
display();//数码管显示函数
}
}
void int_T0()//定时器T0初始化
{
EA=1;//打开总中断
ET0=1;//允许T1中断
TMOD=TMOD&0Xf0|0X01;//配置模式为定时模式(C/T=0),16位自动重装
TH0=(65536-500)/256;//50ms
TL0=(65536-500)%256;//从15536开始计数,到65536溢出,一共计50000个脉冲
TR0=1;//允许计数
}
void fuwu_int_T0(void) interrupt 1//定时器0的优先级比定时器1的优先级高
{//它先要执行完定时器0的服务程序,才能再去执行定时器1的服务程序
{
P0=a;
a=a>>1;
a=a|0x01;
delay_ms((num*100)+1);
}
for(i=0;i<2;i++)//8个led闪烁两次
{
P0=0Xff;//led全部消灭
delay_ms((num*100)+1);
P0=0x00;//led灯全部点亮
delay_ms((num*100)+1);
{
if(pwm1==1)
{
pwm1=1;
flag=0;
}
pwm1--;
}
}
if(num1>64)
{
num1=0;
}
if(num1<=pwm1)
多种流水灯C语言程序设计
/*****************************以下程序均采用12M晶振*****************************************************/#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit p2=P2^0;void main(){TMOD=0x01;TR0=1;ET0=1;EA=1;while(1){;}}timer0() interrupt 1{TH0=0x00;TL0=0x06;p2=!p2;}定时流水灯//#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longbit ldelay=0;void main(){uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; uchar leda;TMOD=0x00;TR0=1;ET0=1;EA=1;while(1)if(ldelay){ldelay=0;P2=led[leda];leda++;if(leda==9)leda=0;}}}timer2() interrupt 1{static uchar t;TF0=0;t++;if(t==10){t=0;ldelay=1;}}变速流水灯//#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longbit ldelay=0;uchar speed=100;void main(){uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; uchar leda;TMOD=0x00;TR0=1;ET0=1;EA=1;while(1)if(ldelay){ldelay=0;P2=led[leda];leda++;if(leda==9){leda=0;speed-=10;if(speed==0)speed=100;}}}}timer2() interrupt 1{static uchar t;TF0=0;t++;if(t==speed){t=0;ldelay=1;}}//每2两圈改变一次亮度#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longbit ldelay=0;uchar speeda=30;uint k=0;void main(){uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; uchar leda;uchar speed[10]={5,80,70,60,50,40,30,20,10,5}; uint i;uint k;TMOD=0x00;TR0=1;ET0=1;EA=1;while(1){if(ldelay){ldelay=0;P2=led[leda];leda++;if(leda==9){leda=0;k++;if(k==2){k=0;speeda=speed[i];i++;if(i==9)i=0;}}}}}timer2() interrupt 1{static uchar t;TF0=0;t++;if(t==speeda){t=0;ldelay=1;}}//在上面基础上调灯的亮度(调占空比)#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longbit ldelay=0;uchar speeda=30;uint k=0;uchar scale;void main(){uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; uchar leda;uchar speed[10]={5,80,70,60,50,40,30,20,10,5};uint i;uint k;TMOD=0x00;TR0=1;ET0=1;EA=1;while(1){if(ldelay==1){ldelay=0;P2=led[leda];leda++;scale++;if(scale==10)scale=0;if(leda==9){leda=0;k++;if(k==2){k=0;speeda=speed[i];i++;if(i==9)i=0;}}}}}timer2() interrupt 1 {static uchar t;TH0=0x1c;TL0=0xbf;TF0=0;t++;if(t==speeda){t=0;ldelay=1;}if(scale==10)P2=0; if(scale==0)P2=1; }。
花式流水灯c语言程序
delay(10000); //延时子程序调用
}
/*流水灯从右向左快速流动*/
for(i=7;i>0;i--) //for 语句判断条,i>0 成立时,执行大括号里面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
delay(10000); //延时子程序调用
}
/*流水灯间隔闪亮*/
#include<reg52.h> 义
Байду номын сангаас
//52 单片机头文件,一般不要改动,里面包含特殊功能寄存器的定
#define uchar unsigned char //将 unsigned char 定义为 uchar,简化输写。提高编程速度 #define uint unsigned int //将 unsigned char 定义为 uint,简化输写。提高编程速度
/*主程序*/
void main()
{
uchar i;
//定义一个无符号字符变量。
while(1)
//做一个死循环,让程序永远在 while 下面的大括号里面运行。
{
/*流水灯从左向右快速流动*/
for(i=0;i<8;i++) //for 语句判断条,i<8 成立时,执行大括号里面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义八个灯的工作状态。
/*延时子程序*/ void delay(uint time) {
while(--time); 句。 }
单片机流水灯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程序设计
七彩流水装饰灯程序设计#include <reg51.h>void delay_ms(unsigned short ms){unsigned short i;unsigned char j;for(i=0;i<ms;i++){for(j=0;j<200;j++);for(j=0;j<102;j++);}} //控制灯的时延子程序void main(void){unsigned char led_contrl; //指示灯控制字节unsigned char i,j; //循环变量unsigned char contrl1,contrl2; //指示灯移位变量while(1){for(j=0;j<3;j++) //模式一:按次序闪烁灯{P2=0xff; //熄灭所有指示灯led_contrl=0x01; //初始化指示灯控制字节delay_ms(300); //延时300MSfor(i=0;i<8;i++){P2=~led_contrl; //点亮控制字节相应指示灯delay_ms(250);if(led_contrl<0x80) led_contrl<<=1; //控制字节移位操作else led_contrl=0x01;}}for(j=0;j<3;j++) //模式二:按次序闪烁灯(一,二流动的方向不一样){P2=0xff; //熄灭所有指示灯led_contrl=0x80; //初始化指示灯控制字节delay_ms(300); //延时300MSfor(i=0;i<8;i++){P2=~led_contrl; //点亮控制字节相应指示灯delay_ms(250);if(led_contrl>0x01) led_contrl>>=1; //控制字节移位操作else led_contrl=0x80;}}for(j=0;j<3;j++) //模式三:依次点亮所有指示灯{P2=0xff; //熄灭所有指示灯led_contrl=0xff; //初始化指示灯控制字节contrl1=0xfe; //初始化移位变量1delay_ms(300);for(i=0;i<8;i++){P2=led_contrl&contrl1; //点亮控制字节相应的指示灯delay_ms(250);contrl1<<=1; //移位变量左移1位}}for(j=0;j<3;j++) //模式四:依次点亮所有指示灯(三,四流动的方向不一样){P2=0xff; //熄灭所有指示灯led_contrl=0xff; //初始化指示灯控制字节contrl1=0x7f; //初始化移位变量1delay_ms(300);for(i=0;i<8;i++){P2=led_contrl&contrl1; //点亮控制字节相应的指示灯delay_ms(250);contrl1>>=1; //移位变量右移1位}}for(j=0;j<3;j++) //模式五:交叉闪烁指示灯{P2=0xff; //熄灭所有指示灯contrl1=0x02; //初始化移位变量1contrl2=0x80; //初始化移位变量2delay_ms(300);for(i=0;i<8;i++){led_contrl=contrl1|contrl2;P2=~led_contrl; //点亮控制字节相应指示灯delay_ms(250);contrl1<<=1; //移位变量1左移1位contrl2>>=1; //移位变量2右移1位}}}。
基于单片机(c语言控制的)流水灯程序设计及proteus仿真图
*///依次闪烁10次后,循环点亮
/* #include<reg51.h>
#include<intrins.h>
#define uint unsigned int
void delay(uint z);
void main()
{
while(1){
P1=0xf0;
delay(1000);
P1=0x0f;
delay(1000);
}
}
void delay(uint z)
{uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
*/ //4个一组,每隔0.5秒交替闪烁点亮
二、总体的连线图(proteus)
三、对应的各种仿真:
1.//1~8号灯依次闪烁
2.//8~1号灯依次闪烁
void delay(int n)
{while(n--);}
main()
{
int i;
while(1)
{
for(i=0;i<8;i++)
{
P1=ledtab[i];
delay(20000);
} //1~8号灯依次闪烁
for(i=0;i<8;i++)
{
P1=ledtab[7-i];
delay(2000);
} //8~1号灯依次闪烁
}
}
*/
/*#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
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的基本操作,控制蜂鸣器的发声。
基于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 的时间}}。
基于单片机(c语言控制的)流水灯程序设计及proteus仿真图-推荐下载
P1=0xff; delay(300);
//1~8 号灯依次闪烁
// 8~1 号灯依次闪烁
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
花样流水灯(汇编)
花样流水灯程序(汇编)汇编起始命令统一为:ORG 0000HLJMP MAINORG 0100H延时程序统一为:DELAY: MOV R7, #10 (延时500ms)DL Y2: MOV R6, #200DL Y1: MOV R5, #125DJNZ R5, $DJNZ R6, DL Y1DJNZ R7, DL Y2RET 注:不可少1.普通流水灯MAIN: MOV A, #0FEHLOOP0: MOV R1,#10HLOOP1: MOV P1,ALCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAY 注:每循环一次延时长一些,以便观察LCALL DELAYSJMP LOOP02.L1亮到L8,L8灭到L1MAIN: MOV A, #0FEH LOOP0:MOV R1, #15LOOP1: MOV P1, ALCALL DELAYRL ADEC R1CJNE R1, #07H,LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R1, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP0 MAIN: MOV A, #0FEH LOOP0: MOV R1, #08MOV R2, #08 LOOP1: MOV P1, ALCALL DELAYRL ADEC R1DJNZ R1, LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R2, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP03.L1到L8逐个亮灭MAIN: MOV A, #0FEHLOOP0: MOV R1, #0FEHMOV R2, #15LOOP1: MOV P1, ALCALL DELAYRL AANL A, R1DEC R2CJNE R2, #07H,LOOP1 注:以上是让灯从1亮到8MOV R1, #80HLOOP2: ORL A, R1MOV P1, ALCALL DELAYRR ADJNZ R2, LOOP2RL ALCALL DELAYLCALL DELAYSJMP LOOP04.13572468亮MAIN: MOV A,#0FEHLOOP0: MOV R1,#08HLOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H ,LOOP1MOV A, #0FDH LOOP2: MOV P1, ALCALL DELAYRL ARL ADJNZ R1, LOOP2RR ASJMP LOOP0 5.逐个闪烁MAIN: MOV A, #0FEH LOOP0: MOV R1,#10H LOOP1: MOV P1,ALCALL DELAYMOV P1, #0FFHLCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAYLCALL DELAYSJMP LOOP06.流水灯四个四个地亮花样IMAIN: MOV A, #0F0H LOOP0: MOV R1, #09H LOOP1: MOV P1, ALCALL DELAYRL A花样IIMAIN: MOV A, #0F0HLOOP0: MOV R1, #040H LOOP1: MOV P1, ALCALL DELAYSWAP ADJNZ R1, LOOP1LCALL DELAYDEC R1CJNE R1,#05H,LOOP1 LOOP2: MOV P1, ALCALL DELAYRR ADJNZ R1,LOOP2RL A LCALL DELAY LCALL DELAY SJMP LOOP0 LCALL DELAY SJMP LOOP07.全亮全灭MAIN:LOOP0: MOV R1, #04H LOOP1: MOV P1, #00HLCALL DELAYMOV P1, #0FFHLCALL DELAYDJNZ R1, LOOP1LCALL DELAYLCALL DELAYSJMP LOOP08.两个两个地亮MAIN: MOV A, #0FCH LOOP0: MOV R1, #08H LOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H,LOOP1RR ARR ALOOP2: MOV P1, ALCALL DELAYRR ARR ADJNZ R1, LOOP2RL ARL ALCALL DELAYLCALL DELAYSJMP LOOP0 9.穿越MAIN: MOV R2,#0FEHMOV R3, #7FH LOOP0: MOV R1,#016 LOOP1: MOV A,R2ANL A,R3MOV P1, ALCALL DELAYMOV A,R2RL AMOV R2, AMOV A,R3RR AMOV R3, ADJNZ R1,LOOP1LCALL DELAYSJMP LOOP0 LCALL DELAY。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 【类型】流水灯各种用法
*/
/* 【现象】流水灯按各种不同样式闪亮
*/
/*************************************************************/
for(i=10;i>0;i--)
{
P2=0x55;
delay(10000); //延时子程序调用
P2=0xaa;
delay(10000); //延时子程序调用 } /*流水灯从左向右闪动*/ for(i=0;i<8;i++) //for 语句判断条 {
P2=table[i]; //P2 口对应取值,八个灯的状态 delay(10000); //延时子程序调用 P2=0xff; delay(10000); //延时子程序调用 P2=table[i]; //P2 口对应取值,八个灯的状态 delay(10000); //延时子程序调用 } /*流水灯从右向左闪动*/ for(i=7;i>0;i--) //for 语句判断条 { P2=table[i]; //P2 口对应取值,八个灯的状态 delay(10000); //延时子程序调用 P2=0xff; delay(10000); //延时子程序调用 P2=table[i]; //P2 口对应取值,八个灯的状态 delay(10000); //延时子程序调用 } } }
delay(10000); //延时子程序调用
}
/*流水灯从右向左快速流动*/
for(i=7;i>0;i--) //for 语句判断条,i>0 成立时,执行大括号里面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
delay(10000); //延时子程序调用
}
/*流水灯间隔闪亮*/
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义八个灯的工作状态。
/*延时子程序*/ void delay(uint time) {
while(--time); 句。 }
//当 time 的值为非 0 时,执行空语句。当 time 为 0 时,跳出 while 语
/*主程序*/
void main()
{
uchar i;
//定义一个无符号字符变量。
while(1)
//做一个死循环,让程序永远在 while 下面的大括号里面运行。
{
/*流水灯从左向右快速流动*/
for(i=0;i<8;i面程序
{
P2=table[i]; //P2 口对应取值,八个灯的状态
#include<reg52.h> 义
//52 单片机头文件,一般不要改动,里面包含特殊功能寄存器的定
#define uchar unsigned char //将 unsigned char 定义为 uchar,简化输写。提高编程速度 #define uint unsigned int //将 unsigned char 定义为 uint,简化输写。提高编程速度