📄 main.c
字号:
/*通过音乐频谱来切换动画*/
/*包含的库文件*/
#pragma small
#pragma CODE DEBUG SYMBOLS OBJECTEXTEND
//#include "..\includes\TypeDef.h"
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include <tdp.h>
#include <string.h>
#define uchar unsigned char
#define ulint unsigned long int
#define uint unsigned int
/***********************************************/
static data uchar cc[16];
#define adress_num 0x02//分控总数
#define row 16//有多少行
#define list 16 //一行有多少个像素;
#define tset 1 //数码管RGB排列情况
//0是RGB RGB RGB
//1是RGBx RGBx RGBx
//2是xRGB xRGB xRGB
uint dpara,c_in,corx,corx1; //延迟的最小单位时间
uchar code color_data[8]={0,4,2,1,6,5,3,7};//黑,红,绿,蓝,黄,紫,青,白//阳码
//uchar code color_data[8]={7,3,5,6,1,2,4,0};//黑,红,绿,蓝,黄,紫,白//阴码
uchar code color_data01[6]={4,6,2,3,1,5};
uchar data adress;
uchar adress_ack=1;
/*********************************************************************
颜色组合 数组
*********************************************************************/
uchar code color_data333[28]={4,4,4,4,6,6,6,6,2,2,2,2,3,3,3,3,1,1,1,1,5,5,5,5 ,7,7,7,7};
#define length 24 // 颜色数组 的列数
#define width 0 // 颜色数组 的行数
/*********************************************************************/
#define wbyte list/8//一行要用多少个字节来表示字色
#define KEY P1
uint ts;
uint r_in; //延迟的最小单位时间
uint t_in; //延迟的最小单位时间
static data uchar rbuf[16];
/*定义颜色控制端口*/
sbit DQ_595=P1^3;/*蓝线 HS74HC595的数据输入*/
sbit CLK_595=P1^2;/*绿线 HS74HC595的时钟*/
sbit STB_595=P1^1;/*红线 HS74HC595的数据锁存*/
sbit EN_595=P1^0;/*黄线 HS74HC595的数据使能*/
sbit RE_DE=P3^3;/*MAX487的收发器控制,当RE_DE=1时当前487处于接收状态 当RE_DE=0时当前487处于发送状态*/
/*********************延时函数*************
函数原型:void dely(ulint timepara);
功 能:延时等待,参数timepara为延时时间*/
void delay(ulint timepara)
{ ulint mpara=0;
do
{
mpara=mpara+1;
}
while (mpara!=timepara);
}
/*********************延时函数*************
函数原型:void dely(ulint timepara);
功 能:延时等待,参数timepara为延时时间*/
void delays(ulint timepara)
{ulint i;
for(i=0;i<timepara;i++)
{
ts=1;
delay(dpara*ts);//12M ---207---0.010S=10ms
}
}
/*********************串口中断初始化*************/
/*设置串行口工作方式1,定时器1作为波特率发生器
波特率设置为 2400 ;*/
void comm (void)
{TMOD=0x20;/*设置定时器T1工作方式2*/
//TL1=0xff;/*定时器计数初值,1152Bps波特率 115.2KBps*/
//TH1=0xff;/*定时器重装值*/
TL1=0xfd;/*定时器计数初值,9600Bps波特率 115.2KBps*/
TH1=0xfd;/*定时器重装值*/
EA=1;/*允许总的中断*/
ES=1;/*允许串行中断*/
PCON=0x00;/*波特率不倍增*/
//PCON |=0x80;/*波特率倍增*/
SCON=0x50;/*设置串口工作方式1,REN = 1 允许接收*/
TR1=0x01;/*定时器开始工作*/
}
//---------------------------------------------------
//函数名称:UART_init()
//函数功能:串口中断初始化
//---------------------------------------------------
/*
void UART_init()
{
//初始化串行设置
SCON=0x50; //选择串口工作方式为1,打开接受允许
PCON=0x00; //波特率提高一倍
TMOD=0x20; //定时器1工作在方式2
TH1=0xfd;
TL1=0xfd;
EA=1;
ES=1;
PS=1;
ET1=0;
TR1=1;
}
*/
void gen(void)
{
ES=0;/*关闭串行中断*/
STB_595=1;//关闭指示灯
dpara=207;
delays(10);
STB_595=0;//打开指示灯
dpara=207;
delays(10);
ES=1;/*关闭串行中断*/
}
/*接收一个字符
void recv_byte(uchar recv)
{ RE_DE=1;//当前487处于接收状态
while(RI==0);//等待接收数据
RI=0;//清除接收标志位
recv=SBUF;
}*/
/*发送一个字符*/
void send_byte(uchar send)
{ RE_DE=0;/*当前487处于发送状态*/
SBUF=send;
while(TI==0); /*等待发送完毕*/
TI=0;/*清除发送中断标志*/
}
//--------------------------------------------------
//函数名称:send_1_bit(uchar send)
//函数功能:
//--------------------------------------------------
/*void send_1_bit(uchar send)
{
RE_DE=0;
SBUF=send;
while(TI==0)
TI=0;
}*/
//--------------------------------------------------
//函数名称:recev_1_bit()
//函数功能:
//--------------------------------------------------
void recev_1_bit(uchar recev)
{
RE_DE=1;
while(RI==0);
RI=0;
recev=SBUF;
}
//调速度函数oid ts_key(void)
//调速度函数
void ts_key(void)
{
ts=KEY&0xF0;//保留高4位,去掉低4位
ts=ts>>4;
if (ts==0||ts==15){ts=1;}
}
/****主程序*******************/
void main(void)
{
uchar i;
uchar sb[4]={0xe5,0xe5,0x02,0x03};
dpara=207;
delays(500);
//RE_DE=0;/*当前487处于发送状态*/
//UART_init();
comm();
IE0=1; //开外部中断允许
IT0=0; //电平触发方式
strat:
EN_595=0;
ES=0;/*关闭串行中断*/
EA=1;/*开启总中断*/
STB_595=0;//打开指示灯
for(adress=1;adress<adress_num+1;adress++)
{adress_ack=1;
for(i=0;i<4;i++)
{
send_byte(sb[i]);//发送控制字
}
send_byte(adress);//发送分控地址
}
//gen();
ES=0;EA=0;/*关闭串行中断及总中断*/
/*dpara=207;
delays(2);*/
STB_595=1;//关闭指示灯
goto strat;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -