用at89C51单片机,编程一套单片机最小系统,要求使用单片机并行口能够控制16盏LED灯进行花式点亮,根据3个开关的组合状态选择LED的不同点亮模式
时间: 2024-05-29 22:10:11 浏览: 233
基于AT89C51单片机的照明控制系统设计.doc
1. 硬件设计:
在at89C51单片机上搭建最小系统,需要包括以下元件:
1)at89C51单片机
2)晶振(一般为11.0592MHz)
3)电源电路(包括稳压电路和滤波电容)
4)外部存储器(EEPROM或Flash)
5)并行口驱动芯片(74HC595或74HC164)
6)16个LED灯及对应电阻
7)3个开关
其中,晶振的主频一般选择11.0592MHz,因为它是at89C51单片机内部时钟信号的倍频,可以提高程序执行速度。电源电路需要包括一个稳压电路和滤波电容,以保证单片机工作的稳定性。外部存储器可以选择EEPROM或Flash,用于存储程序代码。并行口驱动芯片可以选择74HC595或74HC164,用于控制16个LED灯的点亮和熄灭。LED灯需要连接对应的电阻,以限制电流。开关用于选择LED的不同点亮模式。
2. 软件设计:
在at89C51单片机上编程,需要使用汇编语言或C语言。下面以C语言为例,给出一个简单的程序示例:
#include <reg51.h>
sbit S1 = P1^0; // 定义开关1的输入口
sbit S2 = P1^1; // 定义开关2的输入口
sbit S3 = P1^2; // 定义开关3的输入口
sbit LATCH = P2^0; // 定义74HC595的锁存端口
sbit SCLK = P2^1; // 定义74HC595的时钟端口
sbit DATA = P2^2; // 定义74HC595的数据端口
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void send_data(unsigned char t) // 发送数据到74HC595
{
unsigned char i;
for(i=0; i<8; i++)
{
DATA = (t >> i) & 0x01; // 先传送最高位数据
SCLK = 1; // 上升沿时钟,移位寄存器数据移位
SCLK = 0;
}
LATCH = 1; // 上升沿锁存,将移位寄存器的数据输出到输出寄存器
LATCH = 0;
}
void main()
{
unsigned char led_data = 0xff; // 初始值为全灭
while(1)
{
if(S1 == 0 && S2 == 0 && S3 == 0) // 开关1、2、3均按下,点亮所有LED
{
led_data = 0x00; // 全亮
}
else if(S1 == 0 && S2 == 0 && S3 == 1) // 开关1、2按下,点亮前8个LED
{
led_data = 0x00; // 前8个LED亮
}
else if(S1 == 0 && S2 == 1 && S3 == 0) // 开关1、3按下,点亮后8个LED
{
led_data = 0xff; // 后8个LED亮
}
else if(S1 == 0 && S2 == 1 && S3 == 1) // 开关1按下,点亮奇数LED
{
led_data = 0x55; // 奇数LED亮
}
else if(S1 == 1 && S2 == 0 && S3 == 0) // 开关2、3按下,点亮偶数LED
{
led_data = 0xaa; // 偶数LED亮
}
else if(S1 == 1 && S2 == 0 && S3 == 1) // 开关2按下,点亮交替LED
{
led_data = 0x33; // 交替LED亮
}
else if(S1 == 1 && S2 == 1 && S3 == 0) // 开关3按下,点亮滚动LED
{
led_data = 0xfe; // 滚动LED亮
while(S3 == 0) // 按下开关3继续滚动,松开停止
{
send_data(led_data);
delay(1000);
led_data = (led_data << 1) | 0x01; // 左移1位,最低位补1
}
}
else // 其他情况,全灭
{
led_data = 0xff; // 全灭
}
send_data(led_data); // 发送数据到74HC595,控制LED点亮
}
}
在程序中,定义了三个输入口S1、S2、S3,用于读取三个开关的状态。定义了三个输出口LATCH、SCLK、DATA,用于控制74HC595芯片的工作。程序通过判断开关的状态,选择不同的LED点亮模式,将对应的数据发送到74HC595芯片,控制LED点亮。
3. 总结:
在at89C51单片机上搭建最小系统,可以通过并行口驱动芯片控制16个LED灯进行花式点亮,根据三个开关的组合状态选择LED的不同点亮模式。程序设计需要注意硬件接口的定义和数据的传输方式,以实现所需的功能。
阅读全文