📄 rt_rgb122x32.c
字号:
#include<STC58RD.H>
//#include<REGX52.h>
//#include "reg52.h"
#include <intrins.h>
#include "RT_RGB.h"
//#include "led.h"
#define uchar unsigned char
#define uint unsigned int
sbit RR=P1^4;
sbit GG=P1^5;
sbit BB=P1^6;
uchar int_type;
//////////LCD122*32 I/O 信号管脚/////////
uchar int_count;
uchar riflag ;
unsigned char DISPLAY_DATA[10]; //定义显示缓冲区
uchar xdata dat_buf[512];
/**************************************************
各标志位定义
***************************************************/
/******************************************************
延时函数
*******************************************************/
void delay(unsigned int i)
{
while(i--);
}
//if(int_type)break;
void delay_1ms(uint times)//delay 1 ms,for 12MHZ
{ uchar i;
while(times--)
for(i=0;i<121;i++) ;
{_nop_();}
}
void delay2(int i)
{ uchar k;
for(;i>0;i--)
{ for(k=0;k<125;k++)
{_nop_();}
}
}
/*****************************************************
初始化串口
*******************************************************/
void SYS_Init (void)
{
TH1=0xf3;//4800Bit 12MHZ
TL1=0xf3;
//TMOD T/C1-----GATE C/T M1 M0 T/C0-- GATE C/T M1 M0
// TMOD=0x02;
// TH0=156;
// TL0=156; //100 US来一次中断
TMOD=0x20;//M0=0;M1=1;//自动从载八位定时器
//IE EA D6 ET2 ES ET1 EX1 ET0 EX0
EX0=1;
// EX1=1;
ES=1;
// ET0=1;
ET1=0;
//SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0=1;
SM1=1;
SM2=1;
REN=1;
TB8=1;
//PCON SMOD D6 D5 D4 GF1 GF0 PD IDL
PCON=0x80;//加倍
//TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IT0=1;//下降沿触发
//IT1=1;
//IP 中断优先级控制
// IP=0x04;//D7 D6 PT2 PS PT1 PX1 PT0 PX0
TR1=1;
// TR0=1;
EA=1;
P3=0xff;
Received_Flag=0;
}
/********mRF905的初始化***********/
void InitnRF905(void)
{
CSN = 1;
SCK = 0;
PWR_UP = 1;
TRX_CE = 0;
TX_EN = 0;
MISO=1;
MOSI=1;
CSN=1;
// PWR_UP=0;
TX_EN=0;
TRX_CE=0;
SPI_write(0x00,0x4c);//0x6a);
SPI_write(0x01,0x0c);//0x0c);
SPI_write(0x02,0x44);
SPI_write(0x03,0x04);
SPI_write(0x04,0x04);
SPI_write(0x05,0xAA);
SPI_write(0x06,0xAA);
SPI_write(0x07,0xAA);
SPI_write(0x08,P0);
SPI_write(0x09,0x58);
//PWR_UP=1;
TRX_CE=1;
delay2(2);
}
///////////////////////
void getchar(void)
{uint data cout;
// unsigned long int cout;
riflag=0;
for(cout=0;cout<15000;cout++)
{if(RI==1)
{riflag=1;
RI=0;
break;
}
}
}
void sndchar(uchar dats)//reentrant
{uint data cout;
// EA=0;
DE=1;
SBUF=dats;
for(cout=0;cout<15000;cout++)
{if(TI==1)
{
TI=0;
break;
}
}
DE=0;
// EA=1;
}
void send_addr(uchar addr)//reentrant
{uint data count;
EA=0;
TB8=1;
DE=1;
SBUF=addr;//addr=0x55表示命令,让所有从机启动扫灯程序
for(count=0;count<15000;count++)
{if(TI==1)
{TI=0; break;}
}
TB8=0;
DE=0;
EA=1;
}
void Asck(bit Type)
{
send_addr(0x00);
sndchar(0xaa);
if(Type==1)sndchar(0x66);
if(Type==0)sndchar(0x88);
}
void Ask_905()
{uchar buffer[4];
buffer[0]=0xaa;buffer[1]=0x66; buffer[2]=0x00;buffer[3]=0x00;
Send_905(0,buffer);
}
/***************************************************************
905
*****************************************************************/
/**********SPI发送一个字节*********/
void SpiWrite(unsigned char Dat)
{uchar b,i;
for(i=1;i<=8;i++)
{ b=Dat&0x80;
if(b==0x80)
MOSI=1;
else
MOSI=0;
Dat<<=1;
SCK=1;
// _nop_();_nop_();_nop_();
SCK=0;
// _nop_();_nop_();
}
// _nop_();_nop_();_nop_();_nop_();
}
/**********SPI读取一个字节*********/
uchar SpiRead(void)
{ uchar i,a=0;
for(i=1;i<=8;i++)
{ a<<=1;
if(MISO==1)
a|=0x01;
SCK=1;
// _nop_();_nop_();
SCK=0;_nop_();_nop_();
//_nop_();_nop_();_nop_();_nop_();
}
return(a);
}
void SPI_addrs(uchar addrs)
{
SCK=0;
CSN=0;
SpiWrite(0x22);
SpiWrite(0xaa);
SpiWrite(0xaa);
SpiWrite(0xaa);
SpiWrite(addrs);
CSN=1;
}
void SPI_write_some(uchar CMD,uchar *BUF,uchar NUM)
{ uchar b;
SCK=0;
CSN=0;
SpiWrite(CMD);
while(NUM)
{ b=*BUF;
SpiWrite(b);
BUF++;
NUM--;
}
CSN=1;
}
void SPI_write(uchar CMD,uchar DAT)
{ SCK=0;
CSN=0;
SpiWrite(CMD);
SpiWrite(DAT);
CSN=1;
}
void SPI_read_some(uchar CMD,uchar *BUF,uchar NUM)
{
SCK=0;
CSN=0;
SpiWrite(CMD);
while(NUM)
{ *BUF=SpiRead();
BUF++;
NUM--;
}
CSN=1;
}
/*uchar SPI_read(void)
{ uchar a;
SCK=0;
CSN=0;
_nop_();_nop_();
_nop_();_nop_();
a=SpiRead();
_nop_();_nop_();
CSN=1;
return(a);
}*/
void Send_905(uchar addr,uchar *BUF)
{ EA=0;
// InitnRF905();
TRX_CE=0;
TX_EN=0;
SPI_write_some(0x20, BUF,4);
SPI_addrs(addr);
TRX_CE=1;
TX_EN=1;
// delay2(5);
while(!DR);
TX_EN=0;
// InitnRF905();
EA=1;
}
void serialint(void) interrupt 4 using 3
{uchar idata ir;
uint aa;
EA=0;
if(RI)
{
getchar();
if(riflag==0)
{SM2=1;Asck(Error); EA=1;return;}//
temp[0]=SBUF;
if(temp[0]!=P0)//地址
{SM2=1; Asck(Error);EA=1;return; }//
SM2=0;
for(ir=0;ir<5;ir++)
{getchar();
if(riflag==0)
{SM2=1;Asck(Error);EA=1;return;}//
temp[ir+1]=SBUF;
}
if(temp[1]==0xaa)//同步码
{aa=temp[2]+temp[3]+temp[4];
if((aa%255)==temp[5])
{
Asck(Ok);
// Received_Flag=1;
DISPLAY_DATA[0]=temp[2];DISPLAY_DATA[1]=temp[3];DISPLAY_DATA[2]=temp[4];
}
else{Asck(Error); EA=1; return;}
}
else{ EA=1;Asck(Error); return;}//
EA=1;
}
EA=1;
}
void Read_nF905(void) interrupt 0 using 1
{
EA=0;
if(AM)
{
TRX_CE=0;
TX_EN =0;
delay2(4);
SPI_read_some(0x24,Received_buf+18,4);
while(AM);
DISPLAY_DATA[0]=Received_buf[18];
DISPLAY_DATA[1]=Received_buf[18+1];
DISPLAY_DATA[2]=Received_buf[18+2];
Received_Flag=1;
TRX_CE=1;
// Ask_905();
}
EA=1;
}
/*****************************************************
主程序
*******************************************************/
void main(void)
{uchar i,j,k,n;
uint aa=0;
SYS_Init();
DISPLAY_DATA[0]=255;
DISPLAY_DATA[1]=255;
DISPLAY_DATA[2]=255;
DE=0;
EA=0;
InitnRF905();
// InitnRF905();
for(i=0;i<32;i++){ nF905_Send_buf[i]=i;}
EA=1;
while(1)
{
//InitnRF905();
//Send_905(0,nF905_Send_buf);
/*
InitnRF905();
if(Received_Flag){ Received_Flag=0;
TRX_CE=0;
TX_EN=0;
SPI_read_some(0x10,Received_buf,10);
SPI_read_some(0x23,Received_buf+10,4);
SPI_read_some(0x21,Received_buf+14,4);
TRX_CE=1;
TX_EN=0;
for(i=0;i<22;i++)
{sndchar(Received_buf[i]);
Received_buf[i]=0;}
} */
scanRGB(DISPLAY_DATA[0],DISPLAY_DATA[1],DISPLAY_DATA[2]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -