⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 实现几个控制的同步的AT24C512的程序
💻 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 + -