#include
#definebuf_len 9
unsigned char temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char write_buf[buf_len] = {0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
char read_buf[buf_len] = {0};
unsigned char uart_len = 0;
unsigned char uart_RX_num = 0;
void delay_ms(int ntime)
{
int i;
while(ntime--)
for(i = 0; i<120; i );
}
void uart_init(void)
{
TMOD=0x20; //用于定时器设置
TH1=0xfd; //设置初始值 9600=(2的SMOD次方/32)*(TI溢出率)=(1/32)*(11059200/12)/(256-X)
TL1=0xfd;
TR1=1; ///打开定时器1
SM0=0; ///设置串行口工作方式
SM1=1;
REN=1; //允许串行接收位
EA=1; //开启总中断
ES=1; //打开串口中断
//ES = 1;
}
void main(void)
{
unsigned int i =0;
unsigned int oldcount = 0;
unsigned char flag = 1;
unsigned char g,s,b;
uart_init();
P1 = 0x00;
P0 = 0x00;
while(1)
{
if(flag)
{
flag = 0;
ES=0; //关闭串口中断
for(i=0; i<9; i )
{
SBUF = write_buf[i]; ///发送数据a到SBUF,将单片机数据发送到计算机
while(!TI); ///发送数据后,TI自动置1
TI=0; //TI只有置0,下次才能发送
}
ES=1; //打开中断
}
i = 100;
while(i--)
{
P1 = 0x01;
P0 = temp[g];
delay_ms(5) ;
P1 = 0x02;
P0 = temp[s];
delay_ms(5);
P1 = 0x04;
P0 = temp[b];
delay_ms(5);
}
if(uart_RX_num)
{
if(uart_RX_num == oldcount)
{
ES=0; //关闭串口中断
for(i=0; i
{
SBUF = read_buf[i]; ///发送数据a到SBUF,将单片机数据发送到计算机
while(!TI); ///发送数据后,TI自动置1
TI=0; //TI只有置0,下次才能发送
}
g =(read_buf[3]);
s =(read_buf[3]/16);
b =(read_buf[2]);
ES=1; //打开中断
flag = 1;
}
else
oldcount = uart_RX_num;
}
……………………
…………本文篇幅有限 请从51黑下载剩余代码…………