📄 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 + -