很简的51单片机C语言流水灯程序
51单片机的定时器估计是所有MCU里面最简单的定时器了,所涉及到的寄存器不多,就那么几个,如TMOD(模式寄存器),TCON(控制寄存器),具体内容你可以去查看51的DATA SHEET。
在使用的时候,先设置定时器模式,再设置控制寄存器,这些设置都是按照自己的需要来定。
例如你这个功能,4S的定时,你可以这么设置。
/**********************************************************
定时器初始化函数,50mS定时,为什么是50mS不是4S?因为定时器为16位定时模式,最大定时时间为65.535mS,以50mS方便计算
***********************************************************/
void Timer_Init( void )
{
TMOD = 0x01;//定时器0 ,工作方式1,十六位定时模式
TH0 = ( 65536 - 50000 ) / 256; //高八位数据
TL0 = ( 65536 - 50000 ) % 256;//低八位数据 定时时间大概为50mS,具体视晶振频率而定
EA = 1;//因为你要用到中断,所以打开总中断
ET0 = 1;//运行定时器0的中断
TR0 = 1;//定时器0开始计数,当你需要让它停止计数的时候让它等于0就可以了
}
void main()
{
Timer_Init();//调用定时器初始化函数
while(1)
{
//你的程序
}
}
//再写个中断服务函数
void Timer0( void ) interrupt 1
{
static unsigned char count = 0;//该变量用来计50mS的个数,当count = 8时,为4S
TH0 = ( 65536 - 50000 ) / 256; //再给定时器赋初值,否则将改变为复位值
TL0 = ( 65536 - 50000 ) % 256;//
count++;
if( count == 8 )
{
count = 0;
//4S到了,该干嘛干嘛去
}
}
来自理科生的浪漫,用51单片机制作心形流水灯
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单片机是基础入门的一个单片机,还是应用最广泛的一种。
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单片机是基础入门的一个单片机,还是应用最广泛的一种。
#include<reg52.h>
#include <intrins.h>
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
字符型char 默认为signed类型
所以你的延时子程序里j循环条件一直满足
程序调用第一个delay(100)时陷入死循环
此时led=11111110 所以只有第一个灯一直亮
就会这种解释了
你确认只把初值
LED = 0xfe改成~LED = 0?
//---------------------------------------
//头文件
#include<AT89X51.H>
//---------------------------------------
//---------------------------------------
//数据类型替代声明
#define u8 unsigned char
#define u16 unsigned int
//---------------------------------------
u8 led[8]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};
//---------------------------------------
//延时子函数 延时时间为n毫秒
void delay_ms(u8 n)
{
u16 i;
for(;n>0;n--)
{
for(i=114;i>0;i--)
{
;
}
}
}
//---------------------------------------
//---------------------------------------
//流水一次子函数
void liushui(void)
{
u8 i;
for(i=0;i<=7;i++)
{
P0=led[i];
delay_ms(240);
}
}
//---------------------------------------
//---------------------------------------
//主函数
void main(void)
{
while(1)
{
liushui();
}
}
//---------------------------------------
c语言编程c51单片机
include <reg51.h> define uchar unsigned char define uint unsigned int main(){ uint xdata *xp;\/\/定义指向片外RAM的指针 uint data *p;\/\/定义指向片内RAM的指针 uchar i;\/\/定义循环变量 xp=0x100;\/\/指向片外RAM的100H单元 p=0x30;\/\/指向片内RAM的30H单元 for(i=0;i<10;i++){\/\/...
51单片机C语言程序中延时函数delay的原理是什么?
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量 关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大...
51单片机C语言
硬要说算的也要根据你定时器的频率具体得到。如果想要自己利用蜂鸣器编歌,可用下面程序(极乐净土蜂鸣器版)贴上极乐净土的简谱,对照下就能自己用蜂鸣器编歌了 include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit beep=P1^5;\/\/蜂鸣器端口定义uint i,j;unsigned int C;#...
跪求一个51单片机控制ws2812灯带的程序,
数据以GRB顺序发送,即先发送绿色,然后是红色,最后是蓝色。每一位数据由一个高电平脉冲和一个低电平脉冲组成。如果高电平脉冲长于低电平脉冲,那么这一位被认为是1;如果低电平脉冲长于高电平脉冲,那么这一位被认为是0。以下是一个示例程序:```c include <reg51.h> define F_CPU 11059200UL ...
51单片机把数据存入指定的地址或在读指定地址的数据用C语言怎么写?
1. 绝对宏:在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知,例如:rval=CBYTE[0x0002];指向程序存贮器的0002h地址 rval=XWORD[0x0002];指向外RAM的0002h地址 2. _at_关键...
51单片机的优先级怎么用C语言怎么写?
有些单片机的中断优先级在默认的情况下是确定的,不需要设置,例如51单片机,其优先级从高到低以及向量地址是:00H 复位中断 优先级0(最高)03H 外部中断0 10BH 定时器0 213H 外部中断1 31BH
51单片机C语言程序中延时函数delay的原理是什么?
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量 关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大...
51单片机的C语言P2<<1|P2>>7是什么意思
P2是51单片机里的一个8位的特殊功能寄存器,既然是8位的拉,那么它就存了8个0或1。P2<<1,就是将这8个0或1,全部左移1位,最低位补零(最低位如果就是零,那当然不用补了)。比如原来是11111111,左移1位后,就变为11111110。P2>>7同理,只不过是右移7位。P2<<1|P2>>7就是将P2左移...
求一个51单片机用T0做计数器的C语言代码。
\/\/timer0设定为计数器模式1 TMOD &= 0xf0; \/\/清除原来的设定 TMOD |= 0x05; \/\/T0为计数器模式1 TH0 = 0;TL0 = 0; \/\/从0开始计数 TR0 = 1; \/\/使能T\/C0 \/\/ IE |= 0x82; \/\/Timer0中断使能,不需要就注释掉该行 另外执行不了有可能是你的实验板没有连接T0引...
51单片机检测引脚电平变化的C语言程序
include <reg52.h> sbit LED0 = P0^0; sbit LED1 = P0^1; sbit LED2 = P0^2; sbit LED3 = P0^3;sbit LED4 = P0^4; sbit LED5 = P0^5; sbit LED6 = P0^6; sbit LED7 = P0^7;sbit LED10 = P1^0;void main() { LED0 = 0; LED1 = 0; LED2 = ...
扶贝导赤: #include<reg52.h> #include <intrins.h> #define LED P2void delay(char i);void main() { unsigned char LedVablue=0xFE;while(1) {LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h> //里面的一个库函数,相当于汇编的带进位循环 LED=LedVablue; delay(100);} }void delay(char i) { char j; for(;i>0;i--) for(j=0;j<250;j++); }
北川羌族自治县13937377078: 很简的51单片机C语言流水灯程序?
扶贝导赤: #include #define LED P2 void delay(char i); void main() { unsigned char LedVablue=0xFE; while(1) { LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是 //里面的一个库函数,相当于汇编的带进位循环 LED=LedVablue; delay(100); } } void delay(char i) { char j; for(;i>0;i--) for(j=0;j<250;j++); }
北川羌族自治县13937377078: 51单片机用C语言如何写四个数码管的流水灯程序? - ?
扶贝导赤: 用个移位处理就行了 set(void) {static char cnt = 0;P1 = 0x01 << cnt; cnt ++;if (cnt == 4) {cnt = 0; } }
北川羌族自治县13937377078: 51单片机双键控制八位流水灯C程序 - ?
扶贝导赤: #include<reg51.h>#define uchar unsigned char uchar num,flag=0; sbit K1=P1^0; sbit K2=P1^1; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num>=20){num=0;flag=1;} } main() { uchar LED; TMOD=0x...
北川羌族自治县13937377078: 求教大婶们~51单片机单个按键控制流水灯C程序 - ?
扶贝导赤: 很简单啊,只提供一个简单思路, 所以只提供简单的程序,自己理解 char flag=0;viod main() { while(1) { if(key==0 ) //假设0 按下按键 { flag=~flag; } if(flag==0) { leds(); //流水灯函数 } } }
北川羌族自治县13937377078: 51单片机c语言定时器控制流水灯 - ?
扶贝导赤: #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0xFE; for(i=0;i<8;i++) //8个流水灯依...
北川羌族自治县13937377078: 单片机c语言,流水灯,时钟的程序! - ?
扶贝导赤: 网友您好!流水灯程序如下: #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; sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3...
北川羌族自治县13937377078: 如何用51单片机写两LED灯两两一起闪烁的流水灯C程序 - ?
扶贝导赤: 这个比较简单吧uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delay();//自己写吧 延迟一秒 void led_blink();//~~~~~~~~~~~~ void single_stream();//单向流水函数声明 void double_stream();//~~~~~~~~void led_blink() //全...
北川羌族自治县13937377078: 用c语言编写流水灯. - ?
扶贝导赤: C语言流水灯程序是学习的基础,一定要搞懂!给你发两个! (一) #include<reg51.h> //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void ...
北川羌族自治县13937377078: 单片机流水灯的程序怎么打(C语言)?顺便解释解释. - ?
扶贝导赤: 你的事C语言 回答的是汇编 如下 //led显示程序,简单地显示led的程序 //展示了如何控制端口的方法 //现象 : led 8个灯从左到右,然后从右到左显示;#include <8051.h>void delay(unsigned char times);void main() {int k,m;P0 = 0; //关闭数码显...