匿名
未登录
登录
丢石头百科
搜索
查看“使用C8051F驱动PCF8563时钟芯片”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
使用C8051F驱动PCF8563时钟芯片
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<table border="0" cellpadding="0" cellspacing="0" style="color: rgb(72, 61, 139); font-family: Arial, 新宋体, 微软雅黑; font-size: 12px;" width="780"><tbody><tr><th class="type_483D8B" scope="col" style="line-height: 20px; font-weight: normal; border-top-style: none;" valign="top"> <table border="0" cellpadding="0" cellspacing="0" width="120"><tbody><tr><th bgcolor="#698192" class="white_12px_b" height="20" scope="col" style="font-size: 12px; color: rgb(255, 255, 255); line-height: 20px; font-family: Arial, Helvetica, sans-serif;">系统功能</th></tr></tbody></table> 利用C8051F驱动PCF8563时钟芯片,显示时钟。 </th></tr><tr><th class="type_483D8B" scope="col" style="line-height: 20px; font-weight: normal; border-top-style: none;" valign="top"> <table border="0" cellpadding="0" cellspacing="0" width="120"><tbody><tr><th bgcolor="#698192" class="white_12px_b" height="20" scope="col" style="font-size: 12px; color: rgb(255, 255, 255); line-height: 20px; font-family: Arial, Helvetica, sans-serif;">硬件设计</th></tr></tbody></table> [[File:C8051F_3_8.jpg]] LCD12864液晶电路原理图 [[File:C8051F_3_7.jpg]] 使用C8051F驱动PCF8563时钟芯片电路原理图 </th></tr><tr><th class="type_483D8B" scope="col" style="line-height: 20px; font-weight: normal; border-top-style: none;" valign="top"> <table border="0" cellpadding="0" cellspacing="0" width="120"><tbody><tr><th bgcolor="#698192" class="white_12px_b" height="20" scope="col" style="font-size: 12px; color: rgb(255, 255, 255); line-height: 20px; font-family: Arial, Helvetica, sans-serif;">软件设计</th></tr></tbody></table> 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! I2C(SMBus)详细程序请查看<a class="Blue_2_12px_" href="https://{{SERVERNAME}}/article/C8051F-4-3-4.htm" style="color: rgb(7, 66, 184);" target="_blank">C8051F I2C(SMBus)程序 。 LCD12864液晶详细程序请查看<a class="Blue_2_12px_" href="https://{{SERVERNAME}}/article/C8051F-4-3-10.htm" style="color: rgb(7, 66, 184);" target="_blank">C8051F LCD12864程序 。 //目标系统: 基于C8051F单片机 //应用软件: Silicon IDE / Keil /*01010101010101010101010101010101010101010101010101010101010101010101 ---------------------------------------------------------------------- 实验内容: 使用C8051F驱动PCF8563时钟芯片,把读取到的时间在LCD12864上显示 ---------------------------------------------------------------------- 硬件连接: DVK501(PCF8563PrlPort) F320 EX VCC --------- VCC GND --------- GND SDA --------- P1.0 SCL --------- P1.1 DVK501(LCD12864PrlPort) F320 EX VCC --------- VCC GND --------- GND CS --------- P0.7 SID --------- P0.6 SCK --------- P0.0 ---------------------------------------------------------------------- 注意事项: (1)若有加载库程序,请将光盘根目录下的“library”下的“C8051F”文件夹拷到D盘 (2)请详细阅读:光盘根目录下的“说明书首页.htm”里的相应产品说明 ---------------------------------------------------------------------- 10101010101010101010101010101010101010101010101010101010101010101010*/ #define _DVK501_F320_EX_ #include <c8051f320.h> #include <../../../../library/C8051F/ws_clock.h> #include <../../../../library/C8051F/ws_delay.h> #include <../../../../library/C8051F/ws_iic_port.h> #include <../../../../library/C8051F/ws_pcf8563_port.h> #include <../../../../library/C8051F/ws_lcd_st7920_port.h> void main(void) { uchar time[3],tmp=0; PCA0MD &= ~0x40; // Clear watchdog timer enable clock_external(); // Set oscillator in external,the clock is 12M delay_ms(100); Check_SDA(); XBR1 = 0x40; // Enable crossbar and weak pull-ups SPI_Init(); st7920LcdInit(); showLine(0,0,lcd_buffer,"PCF8563 Example"); showLine(0,1,lcd_buffer,"Set Time: OK"); showLine(0,2,lcd_buffer,"Read Time:"); refreshLCD(lcd_buffer); SMBus_Init(); Enb_Interrupt(); PCF8563_init(); PCF8563_setTime(12,0,0); delay_ms(10); while(1) { PCF8563_getTime(time); if(time[0]!=tmp) { showLine(8,3,lcd_buffer,"%d2:%d2:%d2",time[2],time[1],time[0]); refreshLCD(lcd_buffer); } tmp=time[0]; } } /*-------------------------------------------------------------------- 函数全称:十进制强制转换为十六进制 函数功能: 注意事项: 提示说明:调用changeIntToHex(33),return 0x33 输 入: 返 回: --------------------------------------------------------------------*/ #define changeIntToHex(dec) ( (((dec)/10) <<4) + ((dec)%10) ) /*-------------------------------------------------------------------- 函数全称:十进制化为十六进制,并以十进制格式返回 函数功能: 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳 提示说明:调用converseIntToHex(33),return 21 输 入: 返 回: --------------------------------------------------------------------*/ #define converseIntToHex(dec) ( (((dec)>>4) *10) + ((dec)%16) ) /*-------------------------------------------------------------------- 函数全称:十六进制强制转换为十进制 函数功能: 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳 提示说明:调用changeHexToInt(0x33),return 33 输 入: 返 回: --------------------------------------------------------------------*/ #define changeHexToInt(hex) ( (((hex)>>4) *10 ) + ((hex)%16) ) /*-------------------------------------------------------------------- 函数全称:十六进制化为十进制,,并以十六进制格式返回 函数功能: 注意事项: 提示说明:调用converseHexToInt(0x33),return 0x51 输 入: 返 回: --------------------------------------------------------------------*/ #define converseHexToInt(hex) ( (((hex)/10) <<4 ) + ((hex)%10) ) void WriteAByte(uchar wordAdr,uchar dat); void ReadNByte(uchar wordAdr,uchar *pRdDat); void PCF8563_getTime(uchar *buf); void PCF8563_setTime(uchar hour,uchar minute,uchar second); void PCF8563_init(void); #define CTRL_BUF1 0x00 #define CTRL_BUF2 0x01 #define SECOND_DATA_BUF 0x02 #define MINUTE_DATA_BUF 0x03 #define HOUR_DATA_BUF 0x04 #define DAY_DATA_BUF 0x05 #define WEEK_DATA_BUF 0x06 #define MONTH_DATA_BUF 0x07 #define YEAR_DATA_BUF 0x08 #define MINUTE_AE_BUF 0x09 #define HOUR_AE_BUF 0x0A #define DAY_AE_BUF 0x0B #define WEEK_AE_BUF 0x0C #define CLK_FRQ_BUF 0x0D #define TIMER_CTRL_BUF 0x0E #define COUNT_VAL_BUF 0x0F void WriteAByte(uchar wordAdr,uchar dat) { SMBus_Write(0xA2,wordAdr,dat,2); } void ReadNByte(uchar wordAdr,uchar *pRdDat) { SMBus_Write(0xA2,wordAdr,0,1); SMBus_Read(0xA3,pRdDat,3); } void PCF8563_getTime(uchar *buf) { ReadNByte(SECOND_DATA_BUF,buf); buf[0] = buf[0] & 0x7f; //get second data buf[1] = buf[1] & 0x7f; //get minute data buf[2] = buf[2] & 0x3f; //get hour data buf[0] = changeHexToInt(buf[0]); buf[1] = changeHexToInt(buf[1]); buf[2] = changeHexToInt(buf[2]); } void PCF8563_setTime(uchar hour,uchar minute,uchar second) { hour = changeIntToHex(hour); //将数据的Dex格式转换为Hex格式 minute = changeIntToHex(minute); second = changeIntToHex(second); WriteAByte(HOUR_DATA_BUF,hour); WriteAByte(MINUTE_DATA_BUF,minute); WriteAByte(SECOND_DATA_BUF,second); } void PCF8563_init(void) { WriteAByte(CTRL_BUF1,0x00); //basic setting WriteAByte(CTRL_BUF2,0x12); //alarm enable }</th></tr><tr><th class="type_483D8B" scope="col" style="line-height: 20px; font-weight: normal; border-top-style: none;" valign="top"> <table border="0" cellpadding="0" cellspacing="0" width="120"><tbody><tr><th bgcolor="#698192" class="white_12px_b" height="20" scope="col" style="font-size: 12px; color: rgb(255, 255, 255); line-height: 20px; font-family: Arial, Helvetica, sans-serif;">系统调试</th></tr></tbody></table> 改变初始化时间,将语句“PCF8563_setTime(12,0,0);”改成 “PCF8563_setTime(1,2,3);”,断电重启后查看现象。 </th></tr></tbody></table>
返回至
使用C8051F驱动PCF8563时钟芯片
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志