微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机通讯程序

单片机通讯程序

时间:11-11 来源:互联网 点击:
发送机发送按键信息,接收机把接受的信息用数码管显示出来

发送机程序

#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void SET_SYSTEM(void);
uchar KEY_scan(void);

void main()
{
uchar data i;
delay(100);
SET_SYSTEM();
while(1)
{
i=KEY_scan();
if(i)
{
TI=0;
SBUF=i;
while(!TI);
}
}
}
/*************************************************************************************/
void delay(uint t) /* 延时子程序 */
{
uchar i;
while(t--)
{
for(i=0;i<125;i++) {}; /* 12 MHz 晶振大约是 1 ms */
}
}
/*************************************************************************************/
uchar KEY_scan(void) /*键盘扫描程序 (独立式)*/
{
uchar data key;

P1=0xff;
key=P1;
if(key==0xff) return 0;
else
{
delay(10);
key=P1;
if(key==0xff) return 0;
else
{
switch(key)
{
case 0xfe: return 1;break;
case 0xfd: return 2;break;
case 0xfb: return 3;break;
case 0xf7: return 4;break;
case 0xef: return 5;break;
case 0xdf: return 6;break;
case 0xbf: return 7;break;
case 0x7f: return 8;break;
default : return 9;
}
}
}
}
/*************************************************************************************/
void SET_SYSTEM(void)
{
TMOD=0x20; /* 定时器1工作于方式2 */
PCON=PCON&0x07;
TH1=0xfe; /* 设置波特率 */
TL1=0xfe;
SCON=0x50;
IE=0x00; /* 即 EA=0;关所有中断 */
TI=0;
RI=0;
TR1=1;
}
/*************************************************************************************/

接收机程序

#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void SET_SYSTEM(void);
uchar KEY_scan(void);
void LED_display(uchar ,uchar);
uchar xdata IO_8155_order _at_ 0x2100;
uchar xdata IO_8155_PA _at_ 0x2101;
uchar xdata IO_8155_PB _at_ 0x2102;
uchar xdata IO_8155_PC _at_ 0x2103;
uchar data dt=0;
uchar code dig_num[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; /*共阴级数码管的段选码*/
void main()
{
delay(200);
SET_SYSTEM();
IO_8155_order=0x0d; /* 8155 初始化 */
while(1)
{
LED_display(0,dt);
P1=dt;
}
}
/*************************************************************************************/
void delay(uint t) /* 延时子程序 */
{
uchar i;
while(t--)
{
for(i=0;i<125;i++) {}; /* 12 MHz 晶振大约是 1 ms */
}
}
/*************************************************************************************/
void LED_display(uchar d_bit,uchar digit) /* LED 数码管显示子程序*/
{ /*d_bit 表示位选码,digit 表示要显示的数字 */
IO_8155_PC=d_bit; /* 位选码输出*/
IO_8155_PA=dig_num[digit]; /* 段选码输出*/
delay(10);
}
/*************************************************************************************/
void SET_SYSTEM(void)
{
TMOD=0x20; /* 定时器1工作于方式2 */
PCON=PCON&0x07;
TH1=0xfe; /* 设置波特率 */
TL1=0xfe;
SCON=0x50;
IE=0x90; /* 即 EA=1;ES=1;ET1=0;开了串行口中断,关定时器1 的中断 */
TI=0;
RI=0;
TR1=1;
}
/*************************************************************************************/
void RI_RI(void) interrupt 4
{
RI=0;
dt=SBUF;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top