//程序:ex6_1.c
//功能:甲机发送数据程序,采用查询方式实现
#include <reg51.h> //包含头文件reg51.h,定义51单片机的专用寄存器
void main() //主函数
{
unsigned char i;
unsigned char send[]={9,3,5,4,6,7}; //定义要发送的动态密码数据
TMOD=0x20; //定时器T1工作于方式2
TL1=0xf4; //波特率为2400bps
TH1=0xf4;
TR1=1;
SCON=0x40; //定义串行口工作于方式1
for (i=0;i<6;i++)
{
SBUF=send[ i]; // 发送第i个数据
while(TI==0); // 查询等待发送是否完成
TI=0; // 发送完成,TI由软件清0
}
while(1);
}
- //程序:ex6_2.c
- //功能:乙机接收及显示程序,采用查询方式实现,采用中断方式实现的程序参见
- //6.3节中的ex6_5.c程序
- #include <reg51.h> //包含头文件reg51.h,定义51单片机的专用寄存器
- code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //定义0~9共阳极显示字型码
- unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定义接收数据缓冲区
- void disp(void); //显示函数声明
- void main() //主函数
- {
- unsigned char i;
- TMOD=0x20; //定时器T1工作于方式2
- TL1=0xf4; //波特率定义
- TH1=0xf4;
- TR1=1;
- SCON=0x40; //定义串行口工作于方式1
- REN=1; //接收允许
- for(i=0;i<6;i++)
- {
- while(RI==0); //查询等待,RI为1时,表示接收到数据
- buffer[i]=SBUF; //接收数据
- RI=0; //RI由软件清0
- }
- for(;;) disp(); //显示接收数据
- }
- //函数名:disp
- //函数功能:在6个LED上显示buffer中的6个数
- //入口参数:无
- //出口参数:无
- void disp()
- {
- unsigned char w,i,j;
- w=0x01; //位码赋初值
- for(i=0;i<6;i++)
- {
- P1=tab[buffer[i]]; // 送共阳极显示字型段码,buffer[i]作为数组分量的下标
- P2=~w; // 送反相后的位码
- for(j=0;j<255;j++);// 显示延时
- w<<=1;
- }
- }
复制代码
|