- #include<REG52.h>
-
#include<intrins.h>
-
-
#define uchar unsigned char
-
#define uint unsigned int
-
-
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
-
uchar LED_Buffer[8] = {0}; //从串口接收的数据
-
void Delay_1ms(uint i)//1ms延时
-
{
-
uchar x,j;
-
for(j=0;j<i;j++)
-
for(x=0;x<=148;x++);
-
}
-
void Com_Int(void) interrupt 4
-
{
-
static uchar i = 0; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
-
if(RI == 1) //当硬件接收到一个数据时,RI会置位
-
{
-
LED_Buffer[i] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
-
RI = 0;
-
if(i==8)
-
{
-
i = 0;
-
}
-
i++;
-
}
-
}
-
-
void Com_Init(void)
-
{
-
TMOD = 0x20;
-
PCON = 0x00;
-
SCON = 0x50;
-
TH1 = 0xfd; //设置波特率 9600
-
TL1 = 0xfd;
-
TR1 = 1; //启动定时器1
-
ES = 1; //开串口中断
-
EA = 1; //开总中断
-
}
-
-
void Main()
-
{
-
uchar i = 0;
-
Delay_1ms(100);
-
Com_Init();
-
while(1)
-
{
-
P0 = table[LED_Buffer[i]];
-
P2 = i++;
-
Delay_1ms(1);
-
if(i == 8) i=0;
-
}
-
}
说明:
可以再串口RI或者TI置位后,设置中断函数,TI和RI由硬件。通过RI置位可以读取接受到的数组。
然后做进一步的传输。