串口控制全彩LED程序

  • 格式:pdf
  • 大小:61.69 KB
  • 文档页数:7
串口控制全彩LED程序
#include <my.h> #include <stdio.h>
#define uchar unsigned char #define uint unsigned int void delayms(uint) ;
unsigned char dat[6],y=0,x=0; //定义一个字符型变量 void delayms(uint); //纳秒延时函数 void sta(); void stop(); void wr1(void); void wr0(void) ;
//定时器0中断 //////////////////////////////////////////////////
//////////定时器T1初始化,用来对信号剔除保持时间/////
//////////定时器T1初始化,用来对信号剔除保持时间/////
void T1_time() interrupt 3 {
if((dat[5]<<count)&0x80)
else
wr1(); wr0();
} }
第5页
串口控制全彩LED程序
}
y=0; STB=1;
}
//
stop();
} }
//延时函数xms=多少,就是延时多少毫秒
void delayms(uint xms)
{ uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);
串口控制全彩LED程序 while(1) ;
}
/////////////////////////////////////////////////////// //定时器T0,用来做接收到数据后,保持多少毫秒后,才驱动电磁阀响应
void T0_time()interrupt 1 {
//定时0方式1
}
while(TI==0);
第7页
//查询是否发送完毕 //查询是 0x80; SCON = 0x50; BRT = 0xFD; AUXR &= 0xfb;
AUXR |= 0x01;
AUXR |= 0x10;
//使能波特率倍速位SMOD //8位数据,可变波特率 //设定独立波特率发生器重装值 //独立波特率发生器时钟为Fosc/12,即
}
第3页
串口控制全彩LED程序
void Com()interrupt 4 {
if(RI==1) {
y++; RI=0;
STB=0; // sta();
dat[y]=SBUF;
if(y==5) {
for(x=0;x<5;x++) {
if(x==0) {
for(count=0;count<8;count++) {
SBUF=da;
TI=0; delaym(20); cl=1; delaym(20); cl=0; delaym(20); da=0; delaym(20); } void wr0()//写数据0 {
da=0;
while(TI==0);
SBUF=da;
TI=0; delaym(35); cl=1; delaym(35); cl=0; delaym(35); }
if((dat[1]<<count)&0x80)
else
wr1(); wr0();
} }
if(x==1) { for(count=0;count<8;count++) {
if((dat[2]<<count)&0x80)
else
wr1(); wr0();
} }
第4页
串口控制全彩LED程序
if(x==2) { for(count=0;count<8;count++) {
256,最大定时为256纳秒) /* 设机器周期为T,定时产生一次中断时间为t,需要计数的个数为N=t/T
T=12*(1/
晶振)=12*(1/12)=1( 纳秒),设为方式2
THX=256-N TLX=256-N
设N=6,则当计数器计到250个需要 250*1=250(纳秒)溢出
如果需要延时50毫秒,则要中断50000 /250=200次,即为50毫秒到
uint num,num1; //每中断一次时间为250纳秒
sbit cl=P3^5; sbit STB=P1^1; sbit da=P1^2;
unsigned char value; uchar count;
//声明串口初始化程序 void Init_Com(void) {
//19200bps@12MHz
if((dat[3]<<count)&0x80)
else
wr1(); wr0();
} }
if(x==3) { for(count=0;count<8;count++) {
if((dat[4]<<count)&0x80)
else
wr1(); wr0();
} }
if(x==4) { for(count=0;count<8;count++) {
*/
TH1 = 0xc8; //设置波特率初值 TL1 = 0xc8;
// //
}
TH0=6; TL0= 6;
ET0=1;
//装初值T0 //开启定时器T0中断
ET1=1;
//开启定时器T1中断
TR0 = 1;
TR1 = 1;
void main() {
delayms(40);
Init_Com();//串口初始化程序 第2页
//串口1选择独立波特率发生器为波特率
//启动独立波特率发生器
EA=1;
//开总中断源
ES=1;//开启串口中断
TMOD = 0x22; //0010 0010
//定时器T1为定时方式2(8位自动重值,也就是最大计数为
第1页
串口控制全彩LED程序
256,最大定时为256纳秒) //定时器T0为定时方式2(8位自动重值,也就是最大计数为
} //延时函数xms=多少,就是延时多少毫秒
void delaym(uint time) {
for(;time!=0;time--); }
//2.5Us
void sta()
//启动总线传输
{
da=1;
delaym(35);
cl=1;
第6页
串口控制全彩LED程序
delaym(35); da=0; delaym(35); cl=0; delaym(35); } void stop() //结束总线传输 { da=0; delaym(35); cl=1; delaym(35); da=1; delaym(35); da=0; delaym(35); cl=0; delaym(35); } void wr1(void)//写数据1 { da=1;