㈠ 51单片机流水灯用C语言编写的设计程序
其实很简单
就是用_cror_()函数或者 _crol_()函数,第一个是右移第二个是左移
㈡ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(2)51单片机流水灯编程扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈢ 用C51单片机控制12个LED流水灯的C语言程序怎么写
#include "REG52.H"
//控制引脚定义
sbit LED1 = PX.X; //P0.0-P3.7任意引脚
.... .... .......
sbit LED12 = PX.X;
//宏定义灯亮灯灭
#define LED1_ON( ) LED1 =0 //阳极接电源
#define LED1_OFF( ) LED1 =1 //阳极接电源
....... ............. .............
#define LED12_ON( ) LED12 =0 //阳极接电源
#define LED12_OFF( ) LED12 =1 //阳极接电源
void Init_GPIO( )//端口引脚初始化,关闭所有指示灯
{
LED1_OFF( ) ;
..............
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延时函数
{
u16 i, j;
for(i = dat; i>0; i--)
{
for (j=300; j>0; j--);
}
}
int main( ) //主函数
{
Init_GPIO( );//引脚初始化
while(1) //大循环
{
LED1_ON( );//点亮第一个LED
LED2_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);//延时 参数自己可以根据晶振频率自己调节
LED1_OFF( ); //点亮第二个LED
LED2_ON( );
LED3_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);
............. //按照上面修改;
LED1_OFF( );//点亮第十二个LED
LED2_OFF );
LED3_OFF( );
.............
LED12_ON( );
Delay_ms(1000);
}
}
㈣ 51单片机编程流水灯问题
void main()
{
unsigned char i ;
start:P0=0x01;
i=0 ;
while(1)
{
P0=~(1<<i++); //P0口只有8位,即0-7;所以当i自加等于7时要让其从0开始
delay1ms(500);
// if (P0==1) 把这个改为
if( i>= 7 )
{
goto start;
}
}
}
其实在进行用C语言编程中,应当不用或者少用goto语名,如果是一个流水灯程序,可以参考下面这个程序。
#include <reg52.h>
#include <intrins.h> //包含循环左移函数_crol_头文件
#define uchar unsigned char
#define uint unsigned int
void delay1ms(unsigned int a )
{
unsigned char b;
while(a--)
{
for(b=0;b<125;b++);
}
}
void main(void)
{
P0 = 0x01; //先点亮第一个LED
while(1)
{
delay1ms(500);
P0 = _crol_(P0,1); //循环左移1位
}
}
㈤ 80C51单片机流水灯编程
#include<reg51.h> //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
这是代码,具体你可以运行来看效果。
㈥ 51单片机c语言编写流水灯程序
这个有点多,定时器倒是可以写写
TMOD=0xXX;设置工作方式
TH0=0xXX;
TL0=0xXX; 装入计数初值
EA=1;开总中断
TR0=1;开定时器中断
㈦ 51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解
我给你个简单的例子:
#include<AT89X51.H>//预处理文件里面定义了特殊寄存器的名称如P1口定义为P1
voidmain(void)
{
//定义花样数据
constunsignedchardesign[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsignedinta;//定义循环用的变量
unsignedcharb;//在C51编程中因内存有限尽可能注意变量类型的使用
//尽可能使用少字节的类型,在大型的程序中很
受用
do{
for(b=0;b<32;b++)
{
for(a=0;a<30000;a++);//延时一段时间
P1=design[b];//读已定义的花样数据并写花样数据到P1口
}
}while(1);
}
程序中的花样数据可以自以去定义,因这里我们的LED要AT89C51的P1引脚为低电平才
会点亮,所以我们要向P1口的各引脚写数据O对应连接的LED才会被点亮,P1口的八个引
脚刚好对应P1口特殊寄存器的八个二进位,如向P1口定数据0xFE,转成二进制就是
11111110,最低位D0为0这里P1.0引脚输出低电平,LED1被点亮。如此类推,大家不难算
出自己想要做的效果了。
留个邮箱给你发个入门文档
㈧ 51单片机流水灯程序
程序如下,仿真见附件。有问题请追问。
#include<AT89X51.h>
#defineucharunsignedchar
#defineuintunsignedint
bitflag_1s=0;
ucharcodetab[8]={1,2,4,8,16,32,64,128};//[第1小题用这个表]
//ucharcodetab[8]={0x05,0x0a,0x50,0xa0,0xaa,0x55,0xff,0x00};//[第2小题用这个表]
voidInitTimer1(void)
{
TMOD=0x10;
TH1=0x3C;
TL1=0x0B0;
EA=1;
ET1=1;
TR1=1;
}
voidmain(void)
{
staticucharj;
InitTimer1();
P0=0;
P1=0;
P2=0;
P3=0;
flag_1s=1;
while(1)
{
if(flag_1s==1)
{
flag_1s=0;
P2=tab[j];
j++;
if(j>=8)j=0;
}
}
}
voidTimer1Interrupt(void)interrupt3
{
staticuchari;
TH1=0x3C;
TL1=0x0B0;
//addyourcodehere!
i++;
if(i>=20)//50ms*20=1000ms
{
i=0;
flag_1s=1;
}
}
㈨ 很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
㈩ 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H ;复位启动
AJMP START ;
ORG 001BH ;T1中断
AJMP T1INT ;
;定义变量========================
YSJS EQU 30H;延时计数器
LED EQU 31H;LED控制缓冲器
;主程序==========================
START: MOV LED,#0FEH ;初始化数据
MOV YSJS,#0 ;
MOV TMOD,#10H ;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H ;设置定时初值
MOV TH1,#3CH ;定时时间=50mS
SETB ET1 ;使能定时器1中断
SETB TR1 ;启动定时器1
SETB EA ;开总中断
MOV P1,LED ;初始化流水灯
LOOP: JMP LOOP ;循环等待中断
T1INT: PUSH PSW ;定时器1中断程序
PUSH ACC ;保护现场
MOV TH1,#3CH ;定时时间=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保护ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束
(10)51单片机流水灯编程扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。