蓝桥杯单片机DS1302时钟芯片驱动代码注释
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯单片机DS1302时钟芯片驱动代码注释
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
藍橋杯單片機DS1302時鐘芯片驅動代碼之前的疑惑注釋了下
/* DS1302 芯片包含一個 實時時鐘/日歷和 31 字節的靜態 RAM. 與時鐘/RAM 通訊只需要三根線: CE,I/O (數據線),SCLK (串行時鐘).*/#include<STC15F2K60S2.H> #include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit CE=P1^3; sbit IO=P2^3; sbit SCLK=P1^7;uchar code ds[]={55,59,23,10,10,1,16};uchar shijian[7];uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF}; uchar yi,er,san,si,wu ,liu,qi,ba;void delayms(int ms); void allinit(); void display1(uchar yi,uchar er); void display2(uchar san,uchar si); void display3(uchar wu,uchar liu); void display4(uchar qi,uchar ba);void writebyte(uchar dat); void write(uchar add,uchar dat); void dsinit(); uchar read(uchar add); uchar readbyte(); void readtime();void main() {allinit();dsinit();yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;while(1){readtime();yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;display1(yi,er);display2(san,si);display3(wu,liu);display4(qi,ba);} }void readtime() {uchar i;uchar add=0x81;write(0x8e,0x00);//找到control寄存器,關閉寫保護for(i=0;i<7;i++){shijian[i]=read(add);add=add+2;}write(0x8e,0x80); //找到control寄存器,打開寫保護 }uchar read(uchar add)//讀某個地址(COMMAND BYTE)的數據 {uchar i,temp;uchar dat1,dat2;CE=0;//預開始SCLK=0;CE=1;writebyte(add);//命令字寫入,此條語句執行后SCLK=1for(i=0;i<8;i++){SCLK=0;//SCLK=1--->SCKL=0形成下降沿temp>>=1;//整體右移一位,留出一位0,下面用來|if(IO){temp|=0x80;}SCLK=1;}IO=0;dat1=temp/16;//保留高四位,不好理解的話就寫成按權乘開的形式dat2=temp%16;//留下低四位temp=dat1*10+dat2;return temp; }void writebyte(uchar dat)//在SCLK的上升沿寫入對的IO數據 {uchar i;for(i=0;i<8;i++){SCLK=0;IO=dat&0x01;SCLK=1;dat>>=1;} }void write(uchar add,uchar dat)//向某個地址(實際上這里的add是COMMAND BYTE)寫dat {uchar num;CE=0;//SCLK=0;CE=1;writebyte(add);num=(dat/10<<4)|(dat%10);// 十進制BCD碼的轉換writebyte(num);CE=0; }void dsinit() {uchar i;uchar add=0x80;write(0x8e,0x00); //找到control寄存器,關閉寫保護for(i=0;i<7;i++){write(add,ds[i]);//用ds[i]把0x80-0x8c這些寄存器初始化add=add+2;}write(0x8e,0x80);//找到control寄存器,打開寫保護}void delayms(int ms) {int i,j;for(i=ms;i>0;i--)for(j=845;j>0;j--); }void allinit() {P2=0XA0;P0=0X00;//關閉蜂鳴器,繼電器P2=0X80;P0=0XFF;//關閉LED燈P2=0XC0;P0=0XFF;//選擇所有數碼管P2=0XFF;P0=0XFF;//關閉所有數碼管 }void display1(uchar yi,uchar er) {P2=0XC0;//打開位選573 U8P0=0X01;//選擇第一個數碼管P2=0XFF;//打開段選573 U7P0=tab[yi];delayms(1);P2=0XC0;//打開位選573 U8P0=0X02;//選擇第二個數碼管P2=0XFF;//打開段選573 U7P0=tab[er];delayms(1); } void display2(uchar san,uchar si) {P2=0XC0;//打開位選573 U8P0=0X04;//選擇第三個數碼管P2=0XFF;//打開段選573 U7P0=tab[san];delayms(1);P2=0XC0;//打開位選573 U8P0=0X08;//選擇第四個數碼管P2=0XFF;//打開段選573 U7P0=tab[si];delayms(1); }void display3(uchar wu,uchar liu) {P2=0XC0;//打開位選573 U8P0=0X10;//選擇第一個數碼管P2=0XFF;//打開段選573 U7P0=tab[wu];delayms(1);P2=0XC0;//打開位選573 U8P0=0X20;//選擇第一個數碼管P2=0XFF;//打開段選573 U7P0=tab[liu];delayms(1); }void display4(uchar qi,uchar ba) {P2=0XC0;//打開位選573 U8P0=0X40;//選擇第一個數碼管P2=0XFF;//打開段選573 U7P0=tab[qi];delayms(1);P2=0XC0;//打開位選573 U8P0=0X80;//選擇第一個數碼管P2=0XFF;//打開段選573 U7P0=tab[ba];delayms(1); }注釋在代碼里,不單獨列出。
總結
以上是生活随笔為你收集整理的蓝桥杯单片机DS1302时钟芯片驱动代码注释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python常见的数值运算符_第18 p
- 下一篇: 华硕和梅林系统哪个好_RUSHCRM:定