51单片机流水灯用定时器,怎么编程流水灯一秒闪烁一次,

51单片机用定时器0实现流水灯
51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值。原先写的都是用查表来移位的,个人感觉不怎么好,麻烦。直接用位运算的比较好。
n初始值为0,然后n每次循环都加1,P1口赋值语句为:
P1=~(0x01&& n) ; 此处注意和P1=~(0xfe&& n) ; 的区别。
/*********调用头文件*****************/
#include&reg51.h&
#include&intrins.h&
/***********宏定义*******************/
#define uint unsigned int
#define uchar unsigned char
#define long_time0 10
/************定义全局变量************/
/************子函数声明**************/
void init_time0(void);
/*************主函数*****************/
void main(void)
init_time0();
/*********定时器0初始化函数**********/
void init_time0(void)
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
/************定时器中断函数**********/
void time0(void) interrupt 1 using 0
static uint i=0;
if(long_time0==i)
P1=~(0x01&&n);
if(++n==8)n=0;
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!ASK Mobile
51单片机用一个按钮控制流水灯的启停
#define uchar unsigned char
#define unit unsigned int
sbit key=P3^1;
uchar a,d;
delay( uchar);
void main()
if(key==0)
for(a=8;a&0;a--)
delay(50);
d=_crol_(d,1);
for(a=8;a&0;a--)
delay(50);
d=_cror_(d,1);
delay( uchar x)
uchar b,c;
for (b=500;b&0;b--)
for (c=x;c&0;c--);
以上是本人写的程序,它只能启动流水灯,不能停止流水灯。求各位大神指点一下!!!
按赞数排序
yu_xiaofei
你要停流水灯的话,肯定也是跟单片机上你接的那个接口有关,你可以执行一个delay把那个接口置零,然后它就会循环的执行,执行一下流水,然后执行一次全灭了;你如果不想循环,那就不用delay了,直接置零
你这个程序检测到key按下的时候就会执行if语句跳到while语句里面死循环。。不会再跳出来。。。你可以加句if(key==0) break;在你的while语句最后面
sephirothjy
代码里没有清零的部分,可以设置一个计数器,循环N次之后给P0口清零即可停止,或者设置一个外部输入清零按钮51单片机闪烁流水灯
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!博芯电子51单片机精品例程--运用定时器T1控制P0流水灯,使其一个一个依次闪动,左右来回循环-原创视频-搜狐视频
博芯电子51单片机精品例程--运用定时器T1控制P0流水灯,使其一个一个依次闪动,左右来回循环
推荐出品人51单片机1秒定时C语言程序(通过调试)
#include &reg52.h&// 晶振为12MHz,
#include &stdio.h&
#include &absacc.h&
#include &intrins.h&
/***************************
* 定义硬件引脚连接
****************************/
sbit p1_0=P1^0;
/*************************
***********************/
// Byte data intrC // 计时器中断次数
// Byte data beginN // 开始倒计时的时间
//Byte data counterB // 将中断次数放在里面以备后用
unsigned char intrC
unsigned char beginN
unsigned char counterB
void IT0_Init(void);
void Timer0_Overflow();
void GetCounter(void);
void main()
GetCounter() ;每一秒改变一次;
p1_0=!p1_0;;
/*********************************
* GetCounter
* Deion: 取得预先设置的倒计时时间
*******************************/
void GetCounter(void)
//beginNum=1;//在所有开关都没有拨动的时候倒计时为1秒,比设置为0秒要好
intrCounter=20;//每一秒对应的中断次数为20次
/*****************************
* IT0_Init
* Deion: 初始化计时器T0的状态
********************************/
void IT0_Init(void)
TMOD=0x01;//设置T0在方式1下工作
TL0=0xAF;//这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms
ET0=1;//使T0中断可以溢出
EA=1;//开启总中断
TF0=0;//溢出位清零
TR0=1;//开启T0
/******************************
* Timer0_Overflow() 1
* Deion: 中断溢出服务程序, 采用的是中断方式1, 后面最好不加using选择寄存器组以免与系统用在主程序的寄存器冲突
*********************************/
void Timer0_Overflow() interrupt 1
static unsigned char second=20;//用20次中断来判断1秒
intrCounter--;
if (second==0)//每隔一秒的操作
second=20;//重新赋值每秒计数器
if (intrCounter==0)
TR0=0;//关闭T0计数器
原文链接:
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点}

我要回帖

更多关于 单片机流水灯程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信