程序如下,点阵,数码管都关了。灯还是很暗;
#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit sda=P2^0; sbit scl=P2^1; sbit clk=P2^4; sbit lie=P2^5; sbit wei=P2^7; sbit duan=P2^6; sbit led=P1^4; void delay() { ; ; } void delay1(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void start() //开始 { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() //停止 { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void respons() //应答 { uchar m; scl=1; delay(); while((sda==1)&&(m<255)) m++; scl=0; delay(); } void write_byte(uchar x) //写一个字节数据 { uchar i,temp; temp=x; for(i=0;i<8;i++) { scl=0; delay(); temp=temp<<1; sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } uchar read_byte() //读一个字节数据 { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); k=k<<1|sda; delay(); scl=0; delay(); } return k; } void out164(uchar z) //164数据输入 { uchar i; for(i=0;i<8;i++) { lie=z&0x80; clk=0; clk=1; z=z<<1; } } void init() //初始化 { scl=1; sda=1; delay(); duan=1; //关数码管 P0=0; duan=0; wei=1; P0=0xff; wei=0; led=0; out164(0); //关点阵 } void write_aad_date(uchar add,uchar date) //向某地址写入一个数 { start(); write_byte(0xa0); respons(); write_byte(add); respons(); write_byte(date); respons(); stop(); } uchar read_add_date(uchar add) //从某地址读出该数 { uchar a; start(); write_byte(0xa0); respons(); write_byte(add); respons(); start(); write_byte(0xa1); respons(); a=read_byte(); respons(); stop(); return a; } void main() //主函数 { init(); write_aad_date(01,0x55); delay1(100); P0=read_add_date(01); } |