📄 text1.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 + -