⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 四路仿PLC继电器控制板
💻 C
字号:
/********************************************************************
                            汇诚科技

实现功能:此版配套测试程序
使用芯片:AT89S52
晶振:11.0592MHZ
波特率:9600
编译环境:Keil
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     

*********************************************************************/
/********************************************************************
 单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.
*********************************************************************/


#include<reg52.h>  
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
uchar num;
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
/*定义八位出为单片机P2口*/
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
/*定义八位入为单片机P1口*/
sbit IN0=P1^0;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;


/********************************************************************
                    24C08 读写驱动程序
*********************************************************************/
sbit scl=P3^6; // 24c08 SCL
sbit sda=P3^7; // 24c08 SDA

void delay1(uchar x)
{ 
uint i;
for(i=0;i<x;i++);
;
}
void flash(){ ; ; }
void x24c08_init() //24c08 初始化子程序
{
scl=1; 
flash(); 
sda=1;                     
flash();
}
void start() //启动(I方C)总线
{
sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
}
void stop() //停止(I方C)总线
{
sda=0; flash(); scl=1; flash(); sda=1; flash();
}
void writex(uchar j) //写一个字节
{ 
uchar i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
}
scl=0; flash(); sda=1; flash();
}
uchar readx() //读一个字节
{
uchar i,j,k=0;
scl=0; flash(); sda=1;
for (i=0;i<8;i++)
{
flash(); scl=1; flash();
if (sda==1) j=1;
else j=0;
k=(k<<1)|j;
scl=0;}
flash(); return(k);
}
void clock() //(I方C)线时钟
{
unsigned char i=0;
scl=1; flash();
while ((sda==1)&&(i<255))i++;
scl=0; flash();
}
/********************************************************************
                从24c08 的地址address 中读取一个字节数据
*********************************************************************/
unsigned char x24c08_read(unsigned char address)
{
unsigned char i;
start(); writex(0xa0);
clock(); writex(address);
clock(); start();
writex(0xa1); clock();
i=readx(); stop();
delay1(10);
return(i);
}
/********************************************************************
                向24c08 的address地址中写入一字节数据
*********************************************************************/
void x24c08_write(unsigned char address,unsigned char info)
{
start(); writex(0xa0);
clock(); writex(address);
clock(); writex(info);
clock(); stop();
delay1(50);
}
/********************************************************************
                            延时函数
*********************************************************************/
void delay()
{
  uchar i,j;
   for(i=0;i<250;i++){
   for(j=0;j<250;j++);
	 { ;}}
}

void  chuan()
{
 TMOD=0x20;	 //T1为定时器产生波特率//
 SCON=0x50;	  /*串口定义方式2用定时器1产生波特率9600*/
 PCON=0x00;	  /*不倍增波特率*/
 TL1=0xfd;
 TH1=0xfd;
 EA=1;ES=1;
 IP=0x00;
 TR1=1;		  /*定时器工作*/
}

void anjian()
{
if(IN0==0){delay();while(!IN0);K1=!K1;F0=1;}
if(IN1==0){delay();while(!IN1);K2=!K2;F0=1;}
if(IN2==0){delay();while(!IN2);K3=!K3;F0=1;}
if(IN3==0){delay();while(!IN3);K4=!K4;F0=1;}
}
void kou()
{
  switch(dat)
 {
case  'A' :{delay();K1=0;F0=1;}break;
case  'B' :{delay();K2=0;F0=1;}break;
case  'C' :{delay();K3=0;F0=1;}break;
case  'D':{delay();K4=0;F0=1;}break;
case  'K' :{delay();P2=0xf0;F0=1;}break;
case  'a' :{delay();K1=1;F0=1;}break;
case  'b' :{delay();K2=1;F0=1;}break;
case  'c' :{delay();K3=1;F0=1;}break;
case  'd' :{delay();K4=1;F0=1;}break;
case  'k' :{delay();P2=0xff;F0=1;}break;
default:break;	
}
}
void main()
{ chuan();
  x24c08_init();
  num=x24c08_read(0x01);
  P2=num;
  while(1)
  {
   anjian();
   if(RI==1)
   {
	RI=0;
	dat=SBUF;
	kou();
	}
	if(F0==1)
	{F0=0;
	num=P2;
	x24c08_write(0x01,num);
	 }
	}
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -