51单片机C语言对流水灯编程,用定时中断做

 我来答
安全管理人12345gf
2015-12-24 · TA获得超过5523个赞
知道大有可为答主
回答量:5473
采纳率:62%
帮助的人:1223万
展开全部
#include<reg52.h>
#define uchar unsigned char 
uchar m=0,i=0;   
void main()
{
 TMOD|=0x01;    //定时器0工作方式为1
 TH0=(65536-50000)/256;  //装初值  
 TL0=(65536-50000)%256;
 EA=1;   //开总中断
 ET0=1;   //开定时器中断
 TR0=1;   //开启定时器

 while(1); //等待中断

}
void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 m++ ;
 if(m==5) //12M晶振   定时5*50MS=250MS
 {
  m=0;
  P1=~(0X01<<i); //P1接8个LED
  if(++i==8)
  i=0;
 }
}

[补充]

延时函数是一种粗略计算延时时间的函数
是通过让单片机执行空指令,达到等待延时的目的。
经常被应用在对延时时间要求不太严格的场合。
而定时器中断,则是通过对晶振时钟进行计数
由于晶振的频率一般是很稳定的,所以晶振的脉冲频率基本稳定
从而通过对脉冲进行计数即可得到准确的延时目的。
中断延时函数和定时器中断延时没有明确的对应关系。
主要是根据你的应用场合来确定使用哪种函数。

百度网友90b91769c
推荐于2018-02-26 · TA获得超过107个赞
知道答主
回答量:57
采纳率:0%
帮助的人:0
展开全部
// 写了个测试程序,希望对你有帮助
#include<reg52.h>
#define uchar unsigned char
uchar m=0,i=0;
void main()
{
TMOD|=0x01; //定时器0工作方式为1
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //开启定时器

while(1); //等待中断

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++ ;
if(m==5) //12M晶振 定时5*50MS=250MS
{
m=0;
P1=~(0X01<<i); //P1接8个LED
if(++i==8)
i=0;
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑知亿3
2016-02-06 · TA获得超过1.1万个赞
知道小有建树答主
回答量:1396
采纳率:72%
帮助的人:304万
展开全部
#include<reg52.h>
#define uchar unsigned char
uchar m=0,i=0;
void main()
{
TMOD|=0x01; //定时器0工作方式为1
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //开启定时器

while(1); //等待中断

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++ ;
if(m==5) //12M晶振 定时5*50MS=250MS
{
m=0;
P1=~(0X01<<i); //P1接8个LED
if(++i==8)
i=0;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lz2728911909
2019-10-13
知道答主
回答量:12
采纳率:0%
帮助的人:1.8万
展开全部
#include<reg52.h>

sbit D1 =P1^0;
sbit D2 =P1^1;
sbit D3 =P1^2;
sbit D4 =P1^3;
sbit D5 =P1^4;
sbit D6 =P1^5;
sbit D7 =P1^6;
sbit D8 =P1^7;

void main()
{

unsigned char i =0;
unsigned char y =0;

D1 =1;
D2 =1;
D3 =1;
D4 =1;
D5 =1;
D6 =1;
D7 =1;
D8 =1;

TMOD = 0x01;
TH0 = 0xb8;
TL0 = 0x00;
TR0 = 1;

while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xb8;
TL0=0x00;
i++;
}
if(i>=50)
{
i=0;
y++;

}
switch(y)
{
case 1:D1=~D1;break;
case 2:D2=~D2;break;
case 3:D3=~D3;break;
case 4:D4=~D4;break;
case 5:D5=~D5;break;
case 6:D6=~D6;break;
case 7:D7=~D7; break;
case 8:D8=~D8;break;
default: y=0; break;

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
287076907
2010-05-03
知道答主
回答量:21
采纳率:0%
帮助的人:5.9万
展开全部
把具体要求说清楚后,我才好把按照要求写的程序贴出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式