標(biāo)題:
51單片機(jī)按鍵控制花式流水燈程序 Proteus仿真圖
[打印本頁(yè)]
作者:
林中白狼..
時(shí)間:
2025-1-7 19:02
標(biāo)題:
51單片機(jī)按鍵控制花式流水燈程序 Proteus仿真圖
實(shí)現(xiàn)按鍵控制花式流水燈,僅供學(xué)習(xí)可用,一個(gè)完整的學(xué)習(xí)工程
1、HardWare文檔中存放著需要添加進(jìn)去的硬件和初始化的代碼工程
2、HexFile文檔中存放著生成的hex文件
3、Project文檔中存放著啟動(dòng)文件和工程文件
4、UserMain文檔中存放著main函數(shù)代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(61.66 KB, 下載次數(shù): 0)
下載附件
2025-1-9 04:24 上傳
單片機(jī)源程序如下:
#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;
//串口初始化,設(shè)置波特率為9600,使用定時(shí)器1,晶振頻率11.0592Mhz
void UART_Init()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
void UART_Send_Data(u8 byte)
{
SBUF=byte;
while(!TI);//等待串口數(shù)據(jù)發(fā)送完畢
TI=0;//將發(fā)送中斷標(biāo)志位清0,為下次發(fā)送數(shù)據(jù)做準(zhǔn)備
}
void UART_SendString(unsigned char *str) //串口發(fā)送字符串函數(shù)
{
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;//出去接收到的數(shù)據(jù)
RI = 0;//清除接收中斷標(biāo)志位
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;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
}
復(fù)制代碼
仿真程序:
01.7z
(59.39 KB, 下載次數(shù): 0)
2025-1-9 04:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1