程序如下,點陣,數碼管都關了。燈還是很暗;
#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); } |