发第一个单片机程序DS1302芯片
程序代码:
#include <reg51.h> sbit ds1302_nf=P1^2; // p1.2控制CE sbit ds1302_clk=P3^6; // p3.6控制时序 sbit ds1302_io=P3^7; // p3.7控制的是IO口 void ds1302_init() //准备传输数据的初始化,CE拉高,clk拉低 { ds1302_nf=1; ds1302_clk=0; // ds1302_io=0; } void ds1302_close() //关闭数据传输 ,CE拉高,CLK拉低 { ds1302_nf=0; //ds1302_clk=0; //ds1302_io=0; } void ds1302_write_byte(unsigned char addr) //写一个字节 { unsigned char i; for(i=0;i<8;i++) { ds1302_io=addr&1; ds1302_clk=0; addr>>=1; ds1302_clk=1; } } unsigned char ds1302_read_byte() //读一个字节 { unsigned char i,datanum=0; for(i=0;i<8;i++){ datanum>>=1; ds1302_clk=1; ds1302_clk=0; if(ds1302_io==1) datanum|=0x80; } return(datanum); } void ds1302_write_data(unsigned char addr,unsigned char datanum) //数据的写入分两部分,寄存器的选择和读写方式这个是一个字节 后面是一个字节的数据 { ds1302_init(); ds1302_write_byte(addr); ds1302_write_byte(datanum); ds1302_close(); } unsigned char ds1302_read_data(unsigned char addr) //数据的读入分两步,第一步写入 寄存器 的选择控制部分数据,第二步读出一个字节的内容 { unsigned char datanum; ds1302_init(); ds1302_write_byte(addr); datanum=ds1302_read_byte(); ds1302_close(); return(datanum); } void ds1302_wp_set() //写保护位的设置 { ds1302_init(); ds1302_write_data(0x8e,0x80); ds1302_close(); } void ds1302_wp_clear() //清楚保护位 { ds1302_init(); ds1302_write_data(0x8e,0); ds1302_close(); } void delay(unsigned char i) //延时函数 { unsigned char j; for(i;i>0;i--) for(j=0;j<255;j++); } //从DS1302里面读出秒表的数据给P2口 P2口连接的是8个LED灯,看灯的效果 void main() { ds1302_wp_clear(); ds1302_write_data(0x80,0); ds1302_wp_set(); while(1){ delay(1000); P2=ds1302_read_data(0x81); } }
[ 本帖最后由 朱三哥 于 2013-3-2 22:09 编辑 ]