c语言通过串口设置时间,ds1302展示时间(通过串口调试助手) | 您所在的位置:网站首页 › ds1302按键设置时间 › c语言通过串口设置时间,ds1302展示时间(通过串口调试助手) |
ds1302显示时间(通过串口调试助手)---C语言版本 ds1302显示时间(通过串口调试助手--C语言版本详细内容请下载地址: /*ds1302显示时间(通过串口调试助手)*/ #include #include typedef unsigned char uint8; typedef unsigned int uint16; sbit SDA=P3^4; //数据 sbit SCK=P3^5; //时钟 sbit RST=P1^7;//DS1302复位(片选) uint8 time[7]={50,41,20,9,8,4,12};//秒分时日月周年10-08-15 23:59:50 7代表周日 #define DS1302_W_ADDR 0x80 #define DS1302_R_ADDR 0x81 void ds1302_reset()//令SCK=0;RST=1 { RST=0;//停止数据传送 SCK=0;//时钟总线清零 RST=1;//数据操作 } //写一个字节 void ds1302_write_byte(uint8 dat) { uint8 i; for(i=0;i uint8 i,dat=0;//用dat存储读到的数据 for(i=0;i ds1302_reset(); RST=1; ds1302_write_byte(0x8E);//写入地址 ds1302_write_byte(0x00);//写入数据 //写完后 SDA=0; RST=0; } //设置写保护 void ds1302_set_WP() { ds1302_reset(); RST=1; ds1302_write_byte(0x8E);//写入地址 ds1302_write_byte(0x80);//写入数据 //写完后 SDA=0; RST=0; } //写入ds1302 void ds1302_write(uint8 addr,uint8 dat) { ds1302_reset(); RST=1; ds1302_write_byte(addr);//写入地址 ds1302_write_byte(dat);//写入数据 //写完后 RST=0; SDA=0; } //从ds1302读数据 uint8 ds1302_read(uint8 addr) { uint8 temp=0;//存储读出来的数据 ds1302_reset(); RST=1; ds1302_write_byte(addr);//写入地址 temp=ds1302_read_byte();//写入数据 //写完后 RST=0; SDA=0; return temp; } void delay(uint16 n) { while(n--); } /** * 设定时钟数据 其中涉及二进制和BCD转换 因为ds1302存BCD ,但是机器只认识二进制 例如:存入ds1302为50 0101 0000 那么我们写入的是ds1302_write(80) */ void set_time(uint8 *timedata) { uint8 i; uint8 temp=0; for(i=0;i ds1302_write(temp,timedata[i]); temp+=2; } ds1302_set_WP(); } /** * 读时钟数据(BCD格式) */ void read_time(uint8 *timedata) { uint8 i,temp; temp=DS1302_R_ADDR;//读起始位置 for(i=0;i TMOD=0x21; SCON=0x50; TH1=0xFD; TL1=0xFD; TR1=1; } /** * UART发送一字节 */ void UART_Send_Byte(uint8 dat) { SBUF=dat; while(TI==0); TI=0; } /** * 将数据转换成ASC码并通过UART发送出去 */ void UART_Send_Dat(uint8 dat) //注意是关于16取余 { UART_Send_Byte(dat/16+'0'); UART_Send_Byte(dat%16+'0'); } void main() { uart_init(); set_time(&time); //设定时间值 while(1) { read_time(&time); //秒分时日月周年 UART_Send_Dat(time[6]); UART_Send_Byte('-'); UART_Send_Dat(time[4]); UART_Send_Byte('-'); UART_Send_Dat(time[3]); UART_Send_Byte(' '); UART_Send_Dat(time[2]); UART_Send_Byte(':'); UART_Send_Dat(time[1]); UART_Send_Byte(':'); UART_Send_Dat(time[0]); UART_Send_Byte('\r'); UART_Send_Byte('\n'); delay(10000); } } 有问题或是发现错误或是可以改进,希望可以留言,谢谢 |
CopyRight 2018-2019 实验室设备网 版权所有 |