51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解

51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解,第1张

我给你个简单的例子:

#include <AT89X51H> //预处理文件里面定义了特殊寄存器的名称如P1 口定义为P1

void main(void)

{

//定义花样数据

const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,

0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,

0xE7,0xDB,0xBD,0x7E,0xFF};

unsigned int a; //定义循环用的变量

unsigned char b; //在C51 编程中因内存有限尽可能注意变量类型的使用

//尽可能使用少字节的类型,在大型的程序中很

受用

do{

for (b=0; b<32; b++)

{

for(a=0; a<30000; a++); //延时一段时间

P1 = design[b]; //读已定义的花样数据并写花样数据到P1 口

}

}while(1);

}

程序中的花样数据可以自以去定义,因这里我们的LED 要AT89C51 的P1 引脚为低电平才

会点亮,所以我们要向P1 口的各引脚写数据O 对应连接的LED 才会被点亮,P1 口的八个引

脚刚好对应P1 口特殊寄存器的八个二进位,如向P1 口定数据0xFE,转成二进制就是

11111110,最低位D0 为0 这里P10 引脚输出低电平,LED1 被点亮。如此类推,大家不难算

出自己想要做的效果了。

留个邮箱给你发个入门文档

#include<reg52h>

#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晶振   定时550MS=250MS

 {

  m=0;

  P1=~(0X01<<i); //P1接8个LED

  if(++i==8)

  i=0;

 }

}

[补充]

延时函数是一种粗略计算延时时间的函数

是通过让单片机执行空指令,达到等待延时的目的。

经常被应用在对延时时间要求不太严格的场合。

而定时器中断,则是通过对晶振时钟进行计数

由于晶振的频率一般是很稳定的,所以晶振的脉冲频率基本稳定

从而通过对脉冲进行计数即可得到准确的延时目的。

中断延时函数和定时器中断延时没有明确的对应关系。

主要是根据你的应用场合来确定使用哪种函数。

//假设有8个LED通过上拉电阻接到P1端口, 高电平灯灭,低电平灯亮,逐个循环点亮

#include <reg51h>

unsigned char data tab1[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};

void delay()

{

unsigned int data n;

for (n=0;n<40000;n++)

{

;

}

}

void main()

{

unsigned char data i=0;

while(1)

{

P1= ~tab1[i];

delay();

i++;

if (i>=9) i=0;

}

}

//LED1接P20,LED2接P21,低电平点亮

#include <REGX51H>

void _delay_ms(unsigned int c) //误差 0us

{

unsigned char a,b;

for(;c>0;c--)

for(b=199;b>0;b--)

for(a=1;a>0;a--);

}

void main(void)

{

while(1)

{

P2|=(1<<0)&(1<<1);

_delay_ms(300);//300MS

P2|=~((1<<0)&(1<<1));

_delay_ms(300);//300MS

}

}

要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2/12 M =1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下。c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟。

以上就是关于51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解全部的内容,包括:51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解、51单片机C语言对流水灯编程,用定时中断做、c51流水灯单片机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9292520.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存