标题:
求大神对以下单片机源代码做出阐述,目前我还看不懂
[打印本页]
作者:
123112233211
时间:
2020-11-12 17:28
标题:
求大神对以下单片机源代码做出阐述,目前我还看不懂
/*************** writer:shopping.w ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar Receive_Buffer[101];
uchar Buf_Index = 0;
uchar code DSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00
};
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void main()
{
uchar i;
P0 = 0x00;
Receive_Buffer[0]=i;
SCON = 0x50;
TMOD = 0x20;
PCON = 0x00;
TH1 = 0xfd;
TL1 = 0xfd;
EA = 1;
EX0 = 1;
IT0 = 1;
ES = 1;
IP = 0x01;
TR1 = 1;
while(1)
{
for(i=0;i<100;i++)
{
if(Receive_Buffer[i]==-1)
break;
P0 = DSY_CODE[Receive_Buffer[i]];
Delay(200);
}
Delay(200);
}
}
void Serial_INT() interrupt 4
{
uchar c;
if(RI==0)
return;
ES = 0;
RI = 0;
c = SBUF;
if(c>='0' && c<='9')
{
Receive_Buffer[Buf_Index]=c-'0';
Receive_Buffer[Buf_Index+1]=-1;
Buf_Index = (Buf_Index+1)%100;
}
ES = 1;
}
void EX_INT0() interrupt 0
{
uchar *s = ("Receiving From 8051...\r\n");
uchar i = 0;
while(s[i]!='\0')
{
SBUF = s[i];
while(TI == 0);
TI = 0;
i++;
}
}
复制代码
作者:
器车人
时间:
2020-11-12 18:08
/*************** writer:shopping.w ******************/
#include <reg52.h>//头文件
#define uint unsigned int//宏定义无符号整型变量
#define uchar unsigned char//宏定义无符号字符型变量
uchar Receive_Buffer[101];//定义一个接收缓存数组
uchar Buf_Index = 0;//定义一个无符号字符型变量
uchar code DSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00
};//共阴极数码管编码值
void Delay(uint x)//延时函数
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void main()//主函数
{
uchar i;//定义一个无符号字符型变量
P0 = 0x00;//初始化P0口,赋值为0,输出低电平
Receive_Buffer[0]=i;//初始化数组0的值
SCON = 0x50;//单片机寄存器设置
TMOD = 0x20;//
PCON = 0x00;//
TH1 = 0xfd;//计数器初始化高八位
TL1 = 0xfd;//低八位
EA = 1;//开总中断
EX0 = 1;//开外部中断
IT0 = 1;//启动定时器中断
ES = 1;//启动外部中断
IP = 0x01;
TR1 = 1;//启动定时器1
while(1)//循环
{
for(i=0;i<100;i++)
{
if(Receive_Buffer[i]==-1)
break;
P0 = DSY_CODE[Receive_Buffer[i]];
Delay(200);
}
Delay(200);
}
}
void Serial_INT() interrupt 4
{
uchar c;
if(RI==0)
return;
ES = 0;
RI = 0;
c = SBUF;
if(c>='0' && c<='9')
{
Receive_Buffer[Buf_Index]=c-'0';
Receive_Buffer[Buf_Index+1]=-1;
Buf_Index = (Buf_Index+1)%100;
}
ES = 1;
}
void EX_INT0() interrupt 0
{
uchar *s = ("Receiving From 8051...\r\n");
uchar i = 0;
while(s[i]!='\0')
{
SBUF = s[i];
while(TI == 0);
TI = 0;
i++;
}
}
复制代码
作者:
器车人
时间:
2020-11-12 18:10
void Serial_INT() interrupt 4//定时器1中断服务函数
{
uchar c;
if(RI==0)
return;
ES = 0;
RI = 0;
c = SBUF;
if(c>='0' && c<='9')
{
Receive_Buffer[Buf_Index]=c-'0';
Receive_Buffer[Buf_Index+1]=-1;
Buf_Index = (Buf_Index+1)%100;
}
ES = 1;
}
void EX_INT0() interrupt 0//外部中断函数
{
uchar *s = ("Receiving From 8051...\r\n");
uchar i = 0;
while(s[i]!='\0')
{
SBUF = s[i];
while(TI == 0);
TI = 0;
i++;
}
}
复制代码
作者:
csmyldl
时间:
2020-11-12 18:14
该程序是接收串口发送来的100个数据,接收后在P0口的数码管上显示接收来的数据(数据只限0-9的数字)
作者:
SUN_
时间:
2020-11-12 18:18
就是从串口接受数据然后显示出来,不难的!
作者:
lovexulu
时间:
2020-11-12 18:29
此程序可用串口中断接收串口发送来的数字0~9,并将数字保存在数组中,数组能保存最近100个数据,超过时从最早的数据开始依次替换。主程序会循环将收到数字按照查表法转换成段码输出在P0口,如果数据总数不到100个则以当前数据尾数-1结束,并重启循环显示。此程序有外部中断INT0,当外部中断触发则向串口发送“Receiving From 8051...\r\n”
作者:
花心--大萝卜
时间:
2020-11-12 21:04
就是从串口接受数据然后显示出来,接收串口发送来的100个数据,接收后在P0口的数码管上显示接收来的数据
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1