感悟网 导航

用89C52单片机控制32个LED流水灯的C语言程序, 求89C52单片机控制32个LED流水灯的C语言程序

作者&投稿:旗德 (若有异议请与网页底部的电邮联系)
用89C52单片机控制32个LED流水灯的C语言程序,~

/***32灯流水——火柴天堂作品-20130520***/
/***52单片机,12MHz晶振,P0-P3
接32颗LED,低电平驱动***/
#include"REG52.h"//包含52头文件
#define
TRUE
1//定义布尔量'1':真
#define
FALSE
0//定义布尔量'0':假
#define
uchar
unsigned
char//定义
无符号字符型数据
简称
#define
uint
unsigned
int//定义
无符号整型数据
简称
#define
th0
0xb1
#define
tl0
0xe0//20ms
at
12MHz
Fosc
in
Model
1
#define
LED_Port1
P0
#define
LED_Port2
P1
#define
LED_Port3
P2
#define
LED_Port4
P3
#define
LED_AllOff
LED_Port1=LED_Port2=LED_Port3=LED_Port4=0xff
#define
LED_AllOn
LED_Port1=LED_Port2=LED_Port3=LED_Port4=0
#define
LED_Status
43//1步全亮+32步单亮+10步闪烁
#define
LED_Marquee
32
bit
T20msFlag=0;
void
Timer0()
interrupt
1
{
TL0=tl0;
TH0=th0;
T20msFlag=TRUE;
}
void
TimerInit()
{
TMOD=0x01;
TH0=th0;
TL0=tl0;
TR0=1;
ET0=1;
EA=1;
}
void
LED_Out()
{
static
uchar
led_status=0;
if(T20msFlag)
{
T20msFlag=FALSE;
led_status=++led_status%LED_Status;
}
if(led_status
&&
led_status<=LED_Marquee)
{
LED_AllOn;
switch((led_status-1)>>3)
{
case
0:LED_Port1=1<<((led_status-1)%8);break;
case
1:LED_Port2=1<<((led_status-1)%8);break;
case
2:LED_Port3=1<<((led_status-1)%8);break;
case
3:LED_Port4=1<<((led_status-1)%8);break;
default:led_status=0;break;
}
}
else
{
if(!led_status
&&
led_status%2)
LED_AllOn;
else
LED_AllOff;
}
}
void
main()
{
TimerInit();
while(1)
{
LED_Out();
}
}

#include
#define uchar unsigned char
uchar led1,led2,led3,led4;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{ uchar num;
unsigned long int led;
P0=0xff;
P0=0xff;
P0=0xff;
P0=0xff;
delay(200);
while(1)
{
led=0x00000001;
num=0;
while(num<32)
{
led1=(led>24;
led2=(led>16;
led3=(led>8;
led4=led<<num;
P0=led1;
P1=led2;
P2=led3;
P3=led4;
delay(200);
num++;
}
for(num=0;num<5;num++)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
delay(200);
P0=0xff;
P0=0xff;
P0=0xff;
P0=0xff;
delay(200);
}
}
}

/***32灯流水——火柴天堂作品-20130520***/
/***52单片机,12MHz晶振,P0-P3 接32颗LED,低电平驱动***/
#include"REG52.h"//包含52头文件
#define TRUE 1//定义布尔量'1':真
#define FALSE 0//定义布尔量'0':假
#define uchar unsigned char//定义 无符号字符型数据 简称
#define uint unsigned int//定义 无符号整型数据 简称

#define th0 0xb1
#define tl0 0xe0//20ms at 12MHz Fosc in Model 1

#define LED_Port1 P0
#define LED_Port2 P1
#define LED_Port3 P2
#define LED_Port4 P3
#define LED_AllOff LED_Port1=LED_Port2=LED_Port3=LED_Port4=0xff
#define LED_AllOn LED_Port1=LED_Port2=LED_Port3=LED_Port4=0
#define LED_Status 43//1步全亮+32步单亮+10步闪烁
#define LED_Marquee 32

bit T20msFlag=0;
void Timer0() interrupt 1
{
TL0=tl0;
TH0=th0;
T20msFlag=TRUE;
}
void TimerInit()
{
TMOD=0x01;
TH0=th0;
TL0=tl0;
TR0=1;
ET0=1;
EA=1;
}
void LED_Out()
{
static uchar led_status=0;
if(T20msFlag)
{
T20msFlag=FALSE;
led_status=++led_status%LED_Status;
}
if(led_status && led_status<=LED_Marquee)
{
LED_AllOn;
switch((led_status-1)>>3)
{
case 0:LED_Port1=1<<((led_status-1)%8);break;
case 1:LED_Port2=1<<((led_status-1)%8);break;
case 2:LED_Port3=1<<((led_status-1)%8);break;
case 3:LED_Port4=1<<((led_status-1)%8);break;
default:led_status=0;break;
}
}
else
{
if(!led_status && led_status%2) LED_AllOn;
else LED_AllOff;
}
}
void main()
{
TimerInit();
while(1)
{
LED_Out();
}
}

#include<reg51.h>

#define uchar unsigned char
uchar led1,led2,led3,led4;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar num;
unsigned long int led;
while(1)
{
led=0x00000001;
num=0;
while(num<32)
{
led1=(led<<num)>>24;
led2=(led<<num)>>16;
led3=(led<<num)>>8;
led4=led<<num;
P0=led1;
P1=led2;
P2=led3;
P3=led4;
delay(20);
num++;
}
for(num=0;num<5;num++)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
delay(20);
P0=0xff;
P0=0xff;
P0=0xff;
P0=0xff;
delay(20);
}

}
}

#include<reg51.h>

#define uchar unsigned char
uchar led1,led2,led3,led4;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar num;
unsigned long int led;
while(1)
{
led=0x00000001;
num=0;
while(num<32)
{
led1=(led<<num)>>24;
led2=(led<<num)>>16;
led3=(led<<num)>>8;
led4=led<<num;
P0=led1;
P1=led2;
P2=led3;
P3=led4;
delay(20);
num++;
}
for(num=0;num<5;num++)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
delay(20);
P0=0xff;
P0=0xff;
P0=0xff;
P0=0xff;
delay(20);
}

}
}

I/O口连接方式呢?

《STC单片机89C52问题》
答:定时器0中断标志位是ET0,不是TR0,TR0是你使能定时器0中断的,也就是说只有你TR0=1的时候,定时器才开始计数,计数到的装值后,ET0=1,这个才是中断标志。

《如何用89C52单片机控制芯片为UCS1903的全彩灯点亮 如果多颗全彩灯级联...》
答:依照规格书来做,Dout 串33到下一级的 Din

《STC89C52RC单片机的缺点》
答:STC89C52RC比普通89C52多了后缀“RC”,虽然它们都是单片机芯片,但是带有“RC”字样的单片机自带RC时钟振荡电路(有的频率可调有的频率不可调),可以在不接外部晶振就能使用,没有带“RC”这个字样的芯片一般必须安装外部晶振电路。STC89C52RC是宏晶公司的增强型MCS-51单片机,与Atmel公司的AT89C52相比,...

《以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态...》
答:89C52的片子的话,程序存储器是8KB,数据存储器一共256B大小,而且是8位数据线,从一开始输入的65536就出现错误,你这个程序···不敢说什么,我还是要好好把这部分弄个透彻在跟你说吧

《我想知道具体怎样用可充电电池给89c52单片机供电,包括电路图!_百度...》
答:要看你的电池的电压是多少?如果是小于5v电压,就需要升压模块,如果是大于5v,需要稳压模块,不过通常用电池的设备不会选择89C系列的单片机的 ,通常会直接选择如STC12LE5A这种低电压供电的单片机系列,单片机本身就支持3.3v电压的,这样只要用一个 AMS1117 33 稳压模块就可以给MCU供电了。所以MCU也要...

《你好我用的STC自带ad单片机用keil编程,可是keil里没有stc单片机,我先...》
答:不报错的话基本没什么问题,实在不行的话你自己按数据手册上的特殊寄存器地址重新自己定义一遍好了

《如图管脚的51单片机具体型号?》
答:这几款通用的型号:AT89C51、AT89C52、AT89S51、AT89S52、STC89C51RC、STC89C52RC、STC89LE516AD、STC89LE58AD...还有许多种型号,这些都可以通用,后面两种是内部带AD转换的两款芯片

《单片机供电电压最低多少》
答:想用3.7V给3V单片机供电的话串个二极管就行了,一个管子的压降正好。STC12、11、10都是新型号 它们内核一样的,就是只有一些硬件配置有无和大小不一样,比如管脚、AD、EEPROM、ram、硬件PWM,它们的抗干扰性、电磁特性、稳定性、加密性都比老51系列的89C51、89C52好得多。下面的图片是我从手册上截...

《蓄电池智能监控系统怎么设计?》
答:由于MAX4613的S1、S4和S2、S3的控制极性相反,所以不能采用译码电路,而由单片机的四个I/O口线经光耦隔离后单独驱动,以保证同时只有一路电池电压接入后级的分压电路。另外,其控制端采用CMOS电平(VL接V+)。分压电路采用三个相同的电阻,分压后的电压约为4V左右。由于使用同一个分压网络,避免了...

《每次都用低压给STC单片机供电会有影响吗? ~~发现个奇怪的事情...》
答:低压供电就像人吃半饱一样,时间长了,芯片里就适应了,相应的晶体也会发生变化,属于边缘状态

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网