51单片机C语言对流水灯编程,用定时中断做
5个回答
展开全部
#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;
}
}
[补充]
延时函数是一种粗略计算延时时间的函数
是通过让单片机执行空指令,达到等待延时的目的。
经常被应用在对延时时间要求不太严格的场合。
而定时器中断,则是通过对晶振时钟进行计数
由于晶振的频率一般是很稳定的,所以晶振的脉冲频率基本稳定
从而通过对脉冲进行计数即可得到准确的延时目的。
中断延时函数和定时器中断延时没有明确的对应关系。
主要是根据你的应用场合来确定使用哪种函数。
展开全部
// 写了个测试程序,希望对你有帮助
#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;
}
}
#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;
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
#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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把具体要求说清楚后,我才好把按照要求写的程序贴出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询