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

如题所述

#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;
 }
}

[补充]

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

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-26
// 写了个测试程序,希望对你有帮助
#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;
}
}本回答被提问者和网友采纳
第2个回答  2016-02-06
#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个回答  2019-10-13
#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;

}

}
第4个回答  2010-05-03
把具体要求说清楚后,我才好把按照要求写的程序贴出来

求51单片机C语言定时中断流水灯(先左移后右移,一直循环),不要延迟的...
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=(...

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个流水灯依次全部点亮 { P1=temp;delay(500...

51单片机八个灯的流水灯代码
51单片机八个灯的流水灯代码:1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定义单片机的端口,写入延时函数。编辑推荐 对于刚接触...

单片机汇编语言流水灯,定时器中断控制,(500ms)延时
单片机汇编语言流水灯,用定时器中断控制,可以初始化设置定时器时间(如50mS注定时器最大定时时间到不了500mS,需要加计数存储,中断10就是500mS),有多种方式实现如作一个流水状态表,定时读取写入IO端口 表加一,,或者用左移太移等方式都可以实现在,网上有很多这种实例。

51单片机c语言编写一个流水灯程序,要求如下(不能用数组,8个led指示灯...
\/\/流水灯#include "reg52.h"#define LED_PORT P3void delay(unsigned char time){ unsigned char i,j,k; for(i=0;i<time;i++) { for(j=0;j<200;j++) { for(k=0;k<200;k++); } }}void main(){ unsigned char i,halfbyteh=0x80,halfbytel=0x01; while(1) { ...

51单片机流水灯用C语言编写的设计程序???
include<intrins.h> define uchar unsigned char define uint unsigned int void delay(uint z);main(){ uchar aa;while(1){ aa=0xfe;P1=aa;delay(100);while(1){ aa=_crol_(aa,1);P1=aa;delay(100);} } } void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0...

单片机C语言编程:控制流水灯
T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。k3触发外部中断0,级别高于计时器中断,故暂停。include <reg52.h>#include <intrins.h> #defineuint unsigned int#defineuchar unsigned charsbit k1=P1^0; \/\/左循环按钮sbit k2=P1^1; \/\/右循环按钮sbit k4=P1^2; \/\/恢复暂停...

单片机用计时中断控制一个流水灯电路 :每按一次键,发光二极管位置右移...
程序中加了按键防抖和按键释放判断功能。\/*STC51单片机编程实验第一课:彩灯控制器设计(跑马灯))*\/ \/*以下为汇编语言*\/ key0bitP2.0 key1bitP2.1 org 0000h jmpstart org0030h start:mov P0,#11111110B Begin:;jbkey0,next0 calldelay10ms jbkey0,next0 jnbkey0,mova,P0 rra mo...

请问金沙滩51单片机中,先是左移到头,然后再右移到头的花样流水灯程序该...
\/*单片机,用定时中断实现每隔0.2秒让接在P1口的8个小灯从左往右循环点亮。*\/ #include #include #define uchar unsigned char uchar a,b; uchar b=1; uchar a=0xfe; void main() { EA=1;IT1=1;ET0=1; TH0=-5000\/256; TL0=-5000%256; TMOD=0x01;...(火星人)2086 ...

如何用c语言编写流水灯?
C语言流水灯程序是学习的基础,一定要搞懂!给你发两个!\\x0d\\x0a(一)\\x0d\\x0a#include \/\/51系列单片机定义文件\\x0d\\x0a#define uchar unsigned char \/\/定义无符号字符\\x0d\\x0a#define uint unsigned int \/\/定义无符号整数\\x0d\\x0avoid delay(uint); \/\/声明延时函数\\x0d\\...

相似回答