/******************************************************************** 
                            汇诚科技 
 
实现功能:此版配套测试程序 
使用芯片:AT89S52 
晶振:11.0592MHZ 
波特率:9600 
编译环境:Keil 
作者:zhangxinchunleo 
网站:www.ourhc.cn 
淘宝店:汇诚科技 http://shop36330473.taobao.com 
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      
/******************************************************************** 
程序说明: 
1、所有IO口流水灯3次。 
2、所有IO口闪烁输出5次。 
3、接收串口发送的数据再返回原值。 
********************************************************************/ 
#include<reg52.h>                 //库文件 
#define uchar unsigned char//宏定义无符号字符型 
#define uint unsigned int  //宏定义无符号整型 
 
/******************************************************************** 
                            初始定义 
*********************************************************************/ 
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 
/******************************************************************** 
                            延时函数 
*********************************************************************/ 
void delay()//延时程序 0.2秒 
{ 
uchar m,n,s; 
for(m=20;m>0;m--) 
for(n=20;n>0;n--) 
for(s=248;s>0;s--); 
} 
 
/******************************************************************** 
             功能:串口初始化,波特率9600,方式1 
*********************************************************************/         
void Init_Com(void) 
{ 
TMOD = 0x20; 
PCON = 0x00; 
SCON = 0x50; 
TH1 = 0xFd; 
TL1 = 0xFd; 
TR1 = 1; 
} 
/******************************************************************** 
                            闪烁函数 
*********************************************************************/ 
void shanshuo(uchar j) 
{ 
uchar i; 
for(i=0;i<j;i++) 
{ 
P0=0X00 1=0X00 2=0X00 3=0X00; 
delay(); 
P0=0XFF 1=0XFF 2=0XFF 3=0XFF; 
delay(); 
} 
} 
/******************************************************************** 
                            流水灯函数 
*********************************************************************/ 
void liushuideng(uchar j) 
{ 
uchar i,temp,a,k; 
for(i=0;i<j;i++) 
{ 
        temp=0xfe; //11111110定义每次一个灯亮 
        P3=P2=P0=P1=temp;//直接对1/0口赋值,使批输出低电平。 
        delay();//延时 
        for(k=1;k<8;k++)//实现广告灯的从右到左移动 
{ 
a=temp<<k;                //左移i位 
P3=P2=P0=P1=a;//相与求值 
delay(); 
} 
} 
} 
/******************************************************************** 
                            主函数 
*********************************************************************/ 
void main() 
{ 
Init_Com();//串口初始化 
liushuideng(3);//所有IO口流水灯3次 
shanshuo(5);//所有IO口闪烁输出5次 
while(1) 
{ 
if(RI) //扫描判断是否接收到数据, 
{ 
dat=SBUF; //接收数据SBUF赋与dat 
RI=0; //RI 清零。 
SBUF=dat; //在原样把数据发送回去 
}  
} 
} 
         
/******************************************************************** 
                              结束 
*********************************************************************/ 
 
 
 
 |