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

📄 复件 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 0x08//分控总数
#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  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;/*定时器开始工作*/
}

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;/*清除发送中断标志*/
	}

/*********************串口中断服务程序*************/
void comm_int() interrupt 4 using 2
{uchar i,j;
ES=0;/*关闭串行中断*/
EA=0;
RI=0;//清除接收标志位
for(j=0;j<15;j++)
	if(SBUF==0xE5)
	  {while(!RI);//等待接收数据
	   RI=0;//清除接收标志位
	   if(SBUF==0xE5)
	     {while(!RI);//等待接收数据
		  RI=0;//清除接收标志位
		  if(SBUF==adress)//如果
            {while(!RI);//等待接收数据
		     RI=0;//清除接收标志位
		     if(SBUF==0x03)
		       {gen();}
			 }
          }  
	   }
ES=1;EA=1;/*开启串行中断及总中断*/
}
/****主程序*******************/
void main(void)
{uchar i,j;
uchar sb[4]={0xe5,0xe5,0x02,0x03};
dpara=207;
delays(500);
//RE_DE=0;/*当前487处于发送状态*/ 
comm();
IE0=1;
IT0=0;
strat:
EN_595=0;
ES=0;EA=1;/*开启串行中断及总中断*/
for(adress=0;adress<adress_num;adress++)
{
  for(i=0;i<4;i++)
     {
      send_byte(sb[i]);//发送控制字
     }
  send_byte(adress);//发送分控地址
  while(1);
}
  gen();
ES=0;EA=0;/*关闭串行中断及总中断*/
dpara=207;
delay(50);
goto strat;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -