
我给你个简单的例子:
#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流水灯单片机程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)