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

📄 dmx512.c

📁 DMX512接收程序
💻 C
字号:
         
*******************************************************************************/
#include <iom32v.h>
#define xtal 8
#include<FUSHUNI_IO.h>
#include<FUSHUNI_delay.h>

//定义LCD12864的端口线
#define LCD_DATPORT  PORTA     //定义数据端口
#define LCD_DIRPORT  DDRA      //定义方向端口
#define LCD_PINPORT  PINA      //定义数值端口
#include<FUSHUNI_LCDYM12864R_C.h>

const char DISP02[]={"春彦电子_FUSHUNI"};
uchar B1,S1,G1,B2,S2,G2,B3,S3,G3;
uchar CH_B,CH_S,CH_G,TEMP,DATA_CHn;
uint DMX_CHA;
/*共阳数码管字型表,对应0,1,2,3,4,5,6,7,8,9*/
uchar Table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/**********************************主函数**************************************/
void main(void)
{
 delay_ms(100);      //等待电源稳定
 IO_Init(); 
 Init_LCD();
 USART_Init(1);//初始化USART,波特率为250k(8MHz)
 SREG|=0x80;      //开全局中断标志位
 while(1)
 {
 
  }
}

/*******************************初始化I/O函数***********************************/  
void IO_Init(void)  
 {
 DDRA=0xff;PORTA=0xff;
 DDRB=0xFF;PORTB=0xff;
 }   
 
/******************************************************************************/
/*unsigned char USART_Receive( void )
{
//等待接收数据
while ( !(UCSRA & (1<<RXC)) )
;
//从缓冲器中获取并返回数据
return UDR;
} 

/*****************************USART初始化函数**********************************/
void USART_Init(uint baud)
{
 UCSRB=0x00;//设置波特率时先关闭UCSRB
 //设置波特率
 UBRRH=(uchar)(baud>>8);
 UBRRL=(uchar)baud;
 //接收结束中断、接收器与发送器使能|(1<<UCSZ2)
 UCSRB=(1<<RXCIE)|(1<<RXEN)|(0<<TXEN);
 //设置帧格式: 8 个数据位, 2 个停止位
 UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

/**************************USART接收完成中断服务函数***************************/ 
#pragma interrupt_handler USART_RXC:14
 void USART_RXC(void)
 {
  
  SREG&=0x7F;//关全局中断标志位
  
  TEMP=UDR;  //务必暂存UDR值
  //////////////////////////////////////////////////////////////////////////////
  /*CH_B=DMX_CHA/100;             //显示DMX通道百位
  CH_S=(DMX_CHA-CH_B*100)/10;   //显示DMX通道十位
  CH_G=DMX_CHA-CH_B*100-CH_S*10;//显示DMX通道个位*/
  
  //显示调光值百位、十位、个位    
  if(DMX_CHA==1){B1=TEMP/100;S1=(TEMP-B1*100)/10;G1=TEMP-B1*100-S1*10;}
  //显示调光值百位、十位、个位    
  if(DMX_CHA==2){B2=TEMP/100;S2=(TEMP-B2*100)/10;G2=TEMP-B2*100-S2*10;} 
  //显示调光值百位、十位、个位    
  if(DMX_CHA==3){B3=TEMP/100;S3=(TEMP-B3*100)/10;G3=TEMP-B3*100-S3*10;}     
  
  //////////////////////////////////////////////////////////////////////////////
  Locate_yx(1,0);
  /*WriteCDToLCD(1,CH_B+48);
  WriteCDToLCD(1,CH_S+48);
  WriteCDToLCD(1,CH_G+48);*/
  WriteCDToLCD(1,'--');
  WriteCDToLCD(1,B1+48);
  WriteCDToLCD(1,S1+48);
  WriteCDToLCD(1,G1+48);
  WriteCDToLCD(1,'--');
  WriteCDToLCD(1,B2+48);
  WriteCDToLCD(1,S2+48);
  WriteCDToLCD(1,G2+48);
  WriteCDToLCD(1,'--');
  WriteCDToLCD(1,B3+48);
  WriteCDToLCD(1,S3+48);
  WriteCDToLCD(1,G3+48);
  //delay_ms(10);

  DMX_CHA++;if(DMX_CHA==513)DMX_CHA=0;
  SREG|=0x80;      //开全局中断标志位
 } 
 




⌨️ 快捷键说明

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