资源描述:
《DS1302和51单片机设计电子钟数码管显示.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、DS1302和51单片机设计电子钟数码管显示2010-09-0310:39DS1302和51单片机设计电子钟数码管显示(未作出防真)#include#defineucharunsignedchar#defineuintunsignedintuchardis[16]={0,0,0,0,10,10,0,0,7,2,9,0,9,0,0,2};ucharP2_scan[4]={0xf7,0xfb,0xfd,0xfe};//位选择显示扫描ucharP0_scan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0
2、x92,0x82,0xf8,0x80,0x90,0xff};//数字显示不带小数点ucharP0_scan1[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};//数字显示带小数点charclock[7]={4,0,15,10,27,9,9};uchartiao,m=0,n=8,S;bittime=0,p=0;sbitCLK=P1^0;sbitIO=P1^1;sbitRST=P1^2;sbitP32=P3^2;sbitP33=P3^3;sbitP34=P3^4;
3、sbitP35=P3^5;/****************************延时函数**************************/voiddelay(uchartime)//延时0.1ms{uchari,j;do{for(i=0;i<10;i++)for(j=0;j<20;j++);time--;}while(time>0);}/*****************************复位函数******************************/voidreset(){CLK=0;RST=0;RST=1;}
4、/******************************字节写入函数***************************/voidwbyte(ucharW_Byte){uchari;for(i=0;i<8;++i){IO=0;if(W_Byte&0x01)IO=1;CLK=0;CLK=1;//一次上升沿写一位,zwj注W_Byte>>=1;}}/******************************字节读取函数****************************/ucharrbyte(){uchari;ucharR
5、_Byte;ucharTmpByte;R_Byte=0x00;IO=1;for(i=0;i<8;++i){CLK=1;CLK=0;TmpByte=(uchar)IO;//读IO口TmpByte<<=7;R_Byte>>=1;R_Byte
6、=TmpByte;}returnR_Byte;}/****************************DS1302初始化函数**************************/voidinitialize_DS1302(void){reset();wbyte(0x8e);//写保护控制寄存器w
7、byte(0);//允许写入reset();wbyte(0x90);//涓流充电控制寄存器wbyte(0xab);//允许充电,双二极管,8K电阻reset();wbyte(0xbe);//以多字节突发方式写入时钟数据(8个字节)wbyte(clock[1]);//秒wbyte(clock[2]);//分wbyte(clock[3]);//时wbyte(clock[4]);//日wbyte(clock[5]);//月wbyte(clock[0]);//星期wbyte(clock[6]);//年wbyte(0x00);//以多字节突发
8、方式写入时钟数据时,必须对写保护控制寄存器写入0值reset();}/****************************显示函数**************************/voidscan(void)//显示函数{uchark;for(k=0;k<4;k++){if(S>4)P0=~P0_scan[dis[k+S]];elseP0=~P0_scan[dis[k+S]];P2=P2_scan[k];delay(5);P0=0x00;P2=0xff;}}/****************************BCD-非
9、BCD**************************/voidtransform(void){uchark;for(k=0;k<7;++k){clock[k]=(((clock[k]>>4)*10)+(clock[k]&0xf)