标题:
51单片机按键控制花式流水灯程序 Proteus仿真图
[打印本页]
作者:
林中白狼..
时间:
2025-1-7 19:02
标题:
51单片机按键控制花式流水灯程序 Proteus仿真图
实现按键控制花式流水灯,仅供学习可用,一个完整的学习工程
1、HardWare文档中存放着需要添加进去的硬件和初始化的代码工程
2、HexFile文档中存放着生成的hex文件
3、Project文档中存放着启动文件和工程文件
4、UserMain文档中存放着main函数代码
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(61.66 KB, 下载次数: 0)
下载附件
2025-1-9 04:24 上传
单片机源程序如下:
#include "reg51.h"
#include "led.h"
#include "delay.h"
typedef unsigned char u8;
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit KEY3=P2^2;
sbit KEY4=P2^3;
sbit KEY5=P2^4;
sbit KEY6=P2^5;
unsigned char flag = 0;
//串口初始化,设置波特率为9600,使用定时器1,晶振频率11.0592Mhz
void UART_Init()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是9600
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void UART_Send_Data(u8 byte)
{
SBUF=byte;
while(!TI);//等待串口数据发送完毕
TI=0;//将发送中断标志位清0,为下次发送数据做准备
}
void UART_SendString(unsigned char *str) //串口发送字符串函数
{
while(*str!='\0') //判断字符串截止位则退出
{
UART_Send_Data(*str);
str++;
}
}
void main()
{
UART_Init();
Led_Init();
while(1)
{
//UART_Send_Data(0x01);
if(KEY1==0){
delay_ms(10);
if(KEY1==0){
UART_Send_Data(0x01);
flag=1;
}
}
if(KEY2==0){
delay_ms(10);
if(KEY2==0){
UART_Send_Data(0x02);
flag=2;
}
}
if(KEY3==0){
delay_ms(10);
if(KEY3==0){
UART_Send_Data(0x03);
flag=3;
}
}
if(KEY4==0){
delay_ms(10);
if(KEY4==0){
UART_Send_Data(0x04);
flag=4;
}
}
if(KEY5==0){
delay_ms(10);
if(KEY5==0){
UART_Send_Data(0x05);
flag=5;
}
}
if(KEY6==0){
delay_ms(10);
if(KEY6==0){
UART_Send_Data(0x06);
flag=0;
}
}
switch(flag)
{
case 0:{
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
}break;
case 1:{
LED0 = !LED0;
delay_ms(50);
LED2 = !LED2;
delay_ms(50);
LED4 = !LED4;
delay_ms(50);
LED6 = !LED6;
delay_ms(50);
}break;
case 2:{
LED1 = !LED1;
delay_ms(50);
LED3 = !LED3;
delay_ms(50);
LED5 = !LED5;
delay_ms(50);
LED7 = !LED7;
delay_ms(50);
}break;
case 3:{
LED1 = !LED1;
delay_ms(50);
LED2 = !LED2;
delay_ms(50);
LED3 = !LED3;
delay_ms(50);
}break;
case 4:{
LED4 = !LED4;
delay_ms(50);
LED5 = !LED5;
delay_ms(50);
LED6 = !LED6;
delay_ms(50);
}break;
case 5:{
LED0 = 0;
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
delay_ms(100);
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
delay_ms(100);
}break;
}
}
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
if(receiveData == 0x01)
{
flag = 1;
}
else if(receiveData == 0x02)
{
flag = 2;
}
else if(receiveData == 0x03)
{
flag = 3;
}
else if(receiveData == 0x04)
{
flag = 4;
}
else if(receiveData == 0x05)
{
flag = 5;
}
else{flag = 0;}
//SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
复制代码
仿真程序:
01.7z
(59.39 KB, 下载次数: 0)
2025-1-9 04:24 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1