#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define rs_h PORTC|=0x01
#define rs_l PORTC&=0xfe
#define rw_h PORTC|=0x02
#define rw_l PORTC&=0xfd
#define en_h PORTC|=0x04
#define en_l PORTC&=0xfb
#define rst_h PORTC|=0x08
#define rst_l PORTC&=0xf7
#define sck_h PORTC|=0x10
#define sck_l PORTC&=0xef
#define io_h PORTC|=0x20
#define io_l PORTC&=0xdf
#define SECADD 0X80//秒寄存器地址
#define MINADD 0x82
#define HRADD 0x84
#define DATEADD 0x86
#define MONTHADD 0x88
#define DAYADD 0x8a
#define YEARADD 0x8c
#define CONTROLADD 0x8e
#define PORT (PORTB)
void delayms(uint x);
void lcd_com(uchar com);
void lcd_dat(uchar dat);
void lcd_write(uchar c,uchar r,uchar dat);
void lcd_init(void);
void Ds1302Init(void);
void WriteByte(uchar dat);
uchar ReadByte(void);
uchar BCDtoDex(uchar dat);
uchar DextoBCD(uchar dat);
uchar ReadByte(void);
void Ds1302Write(uchar add,uchar dat);
uchar Ds1302Read(uchar add);
void main(void)
{
uchar sec,min,hr,date,month,day,year;
TRISB=0x00;
TRISC&=0xc0;
lcd_init();
Ds1302Init();
while(1)
{
sec=Ds1302Read(SECADD);
min=Ds1302Read(MINADD);
hr=Ds1302Read(HRADD);
date=Ds1302Read(DATEADD);
month=Ds1302Read(MONTHADD);
day=Ds1302Read(DAYADD);
year=Ds1302Read(YEARADD);
sec=BCDtoDex(sec);
min=BCDtoDex(min);
hr=BCDtoDex(hr);
date=BCDtoDex(date);
month=BCDtoDex(month);
day=BCDtoDex(day);
year=BCDtoDex(year);
lcd_write(0,1,0x32);
lcd_write(0,2,0x30);
lcd_write(0,3,0x30+year/10);
lcd_write(0,4,0x30+year%10);
lcd_write(0,6,0x30+month/10);
lcd_write(0,7,0x30+month%10);
lcd_write(0,9,0x30+date/10);
lcd_write(0,10,0x30+date%10);
lcd_write(0,14,0x30+day);
lcd_write(1,4,0x30+hr/10);
lcd_write(1,5,0x30+hr%10);
lcd_write(1,7,0x30+min/10);
lcd_write(1,8,0x30+min%10);
lcd_write(1,10,0x30+sec/10);
lcd_write(1,11,0x30+sec%10);
delayms(1005);//1ms
}
}
void Ds1302Init(void)
{
rst_l;
sck_l;
Ds1302Write(CONTROLADD,0);//關(guān)閉寫保護(hù)
Ds1302Write(MINADD,DextoBCD(06));
Ds1302Write(HRADD,DextoBCD(19));
Ds1302Write(DATEADD,DextoBCD(20));
Ds1302Write(MONTHADD,DextoBCD(5));
Ds1302Write(DAYADD,DextoBCD(7));
Ds1302Write(YEARADD,DextoBCD(12));
Ds1302Write(SECADD,DextoBCD(30));//寫秒,同時(shí)啟動(dòng)時(shí)鐘
}
void WriteByte(uchar dat)//上升沿輸出
{
uchar i;
TRISC&=0xdf;
for(i=8;i>0;i--)
{
sck_l;//低電平時(shí)數(shù)據(jù)線可變
if(dat&0x01)
io_h;
else
io_l;
sck_h;
dat>>=1;
}
}
uchar BCDtoDex(uchar dat)//BCD碼轉(zhuǎn)十進(jìn)制
{
uchar i;
i=dat/16;
dat%=16;
i=i*10+dat;
return i;
}
uchar DextoBCD(uchar dat)//十進(jìn)制轉(zhuǎn)BCD碼
{
uchar i;
i=dat/10;
dat%=10;
i=i*16+dat;
return i;
}
uchar ReadByte(void)//下降沿輸出
{
uchar i;
uchar dat;
TRISC|=0x20;
for(i=8;i>0;i--)//要考慮之前寫完后的狀態(tài),第一次進(jìn)入此循環(huán)體即有下降沿
{
dat>>=1;
sck_l;
if(PORTC&0x20)
dat|=0x80;
sck_h;
}
return dat;
}
void Ds1302Write(uchar add,uchar dat)
{
rst_l;
sck_l;
rst_h;
WriteByte(add);//最低位置0表示寫
WriteByte(dat);
rst_l;
}
uchar Ds1302Read(uchar add)
{
uchar dat;
rst_l;
sck_l;
rst_h;
WriteByte(add+1);//地址最低位置1表示讀
dat=ReadByte();
rst_l;
return dat;
}
void delayms(uint x) //8M晶振下,延時(shí)1ms
{
uint y,z;
for(y=x;y>0;y--)
for(z=220;z>0;z--);
}
void lcd_init(void)//LCD1602初始化
{
lcd_com(0x38);
lcd_com(0x0c);
lcd_com(0x06);
lcd_write(0,5,0xb0);
lcd_write(0,8,0xb0);
lcd_write(1,6,0x3a);
lcd_write(1,9,0x3a);
}
void lcd_com(uchar com)//向LCD1602寫命令
{
rs_l;
rw_l;
PORT=com;
delayms(1);
en_h;
delayms(1);
en_l;
}
void lcd_dat(uchar dat)//向LCD1602寫數(shù)據(jù)
{
rs_h;
rw_l;
PORT=dat;
delayms(1);
en_h;
delayms(1);
en_l;
}
void lcd_write(uchar c,uchar r,uchar dat)//向LCD1602指定行、指定列、寫數(shù)據(jù)
{
lcd_com(0x80+0x40*c+r);
lcd_dat(dat);
delayms(1);
}
上一篇:PIC單片機(jī)(PIC16F877A)DS18B20溫度傳感器驅(qū)動(dòng)程序
下一篇:PIC16F877A輸入檢測問題
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- IAA MOBILITY移動(dòng)出行趨勢指數(shù)發(fā)布
- 寧德時(shí)代CTP 2.0電池包產(chǎn)線投產(chǎn),助力問界系列車型加速交付
- 研究人員開發(fā)出新型多功能電池陰極材料
- 特斯拉中國大陸首批V4超級充電樁上線
- 方向盤消失前夜:特斯拉、百度、哈啰三巨頭的Robotaxi戰(zhàn)爭
- 均普智能人形機(jī)器人開賣,拿下約3000萬元訂單
- 博世推出超低功耗全集成MEMS傳感器
- 福特汽車申請新專利:基于手勢的虛擬鍵盤
- 一汽大眾:智能網(wǎng)聯(lián)汽車的信息安全攻防之道
- 一文講透汽車區(qū)域控制架構(gòu),以及那些關(guān)鍵技術(shù)
- 【EE團(tuán)】搶先體驗(yàn) ST最新STM32F0308-DISCOVERY開發(fā)工具!
- 柵極驅(qū)動(dòng)挑花眼?看英飛凌來支招
- Microchip最新SAM 以及 PIC32單片機(jī)軟件開發(fā)平臺-- MPLAB® Harmony V3介紹 ”
- 救火車和你一起學(xué)ARM系列活動(dòng)
- 免費(fèi)獲贈LPC800迷你板 搶先體驗(yàn)MO+優(yōu)異性能!
- 調(diào)查:全新 TI E2E中文社區(qū)等你體驗(yàn),等你抽獎(jiǎng)!還可邀請好友助你一臂之力!
- 【EEWORLD第十屆社區(qū)明星人物】12月明星人物
- 省錢、省心的購買租賃方案,讓您不再為預(yù)算煩惱!
- 直播【英飛凌應(yīng)用于變頻家電和中小功率工業(yè)變頻控制領(lǐng)域的產(chǎn)品:iMOTION™】
- 雙 11 拯救行動(dòng):用開發(fā)板治愈單身狗之憂桑
- 特斯拉撇清起火責(zé)任,成功將責(zé)任甩鍋給了松下
- 賈躍亭電動(dòng)車再生變數(shù),第九城市將分三期注資
- 火場上的新“戰(zhàn)士”-消防機(jī)器人
- 寧德時(shí)代表態(tài)將配合蔚來ES8召回的工作
- Uber正式完成收購Mighty AI,這筆買賣到底值不值?
- 自動(dòng)駕駛汽車也可以用毫米波遠(yuǎn)程通信?項(xiàng)目已在研究進(jìn)行
- 動(dòng)力電池領(lǐng)域?qū)幍聲r(shí)代在企業(yè)排名只排在第13位
- 中國發(fā)展了十年的新能汽車,是否真的走了錯(cuò)誤路線?
- 我國的新能源汽車沒有了補(bǔ)貼還能走多遠(yuǎn)?
- 日本缺少石油和能源,電動(dòng)汽車轉(zhuǎn)型將面臨哪些問題?