欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機多功能萬年歷溫度(12864液晶顯示)
[打印本頁]
作者:
花花333
時間:
2020-6-21 14:04
標題:
51單片機多功能萬年歷溫度(12864液晶顯示)
給大家分享一個基于51單片機的多功能萬年歷12864液晶顯示,溫度補償,同時更新時間溫度,與電腦同步。可以設置鬧鐘
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
O3[(Y6U_$CFM_S67AKSXS4P.png
(47.33 KB, 下載次數: 100)
下載附件
2020-6-21 14:03 上傳
單片機源程序如下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#include "value.h"
#include "nongli.h"
uchar n_nian,n_yue,n_ri;
bit flag_200ms = 1;
uchar menu_1;
uchar flag_clock_en; //鬧鐘標志位
uchar flag_clock_kai; //鬧鐘開標志位
uchar flag_c_en;
bit flag_100ms;
sbit beep=P2^7; //蜂鳴器IO口
sbit dq=P3^2; //18b20 IO口的定義
uint temperature ; //溫度變量
/************ 延時函數 *****************/
void delay_uint(uint z)
{
while(z--);
}
/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<115;j++);
}
uchar dis_lcd[10];
#include "lcd12864bu.h"
/******************顯示時間函數***************************/
void dis_shijian() //顯示時間
{
write_shu16(3*2,1*8,shi,0);
write_shuzi(1,3*2,3*8,fuhao[1],0);
write_shu16(3*2,4*8,fen,0);
write_shuzi(1,3*2,6*8,fuhao[1],0);
write_shu16(3*2,7*8,miao,0);
write_shu16(1*2,6*8,nian,0);
write_shu16(1*2,10*8,yue,0);
write_shu16(1*2,14*8,ri,0);
write_shu16(2*2,4*8,n_yue,0);
write_shuzi(1,2*2,6*8,fuhao[0],0);
write_shu16(2*2,7*8,n_ri,0);
if(week==0)
{
write_yhanzi(1,4,7*16,xingqi[0]);
}
if(week==1)
{
write_yhanzi(1,4,7*16,xingqi[1]);
}
if(week==2)
{
write_yhanzi(1,4,7*16,xingqi[2]);
}
if(week==3)
{
write_yhanzi(1,4,7*16,xingqi[3]);
}
if(week==4)
{
write_yhanzi(1,4,7*16,xingqi[4]);
}
if(week==5)
{
write_yhanzi(1,4,7*16,xingqi[5]);
}
if(week==6)
{
write_yhanzi(1,4,7*16,xingqi[6]);
}
if(week==7)
{
week=0;
write_yhanzi(1,4,7*16,xingqi[0]);
}
write_shu18b20(3*2,10*8,temperature,0);
write_shuzi(1,3*2,12*8,dian,0);
}
/************初始化顯示*****************/
void init_12864_dis() //初始化顯示
{
cs1=1; //左屏開顯示
cs2=0;
write_yhanzi(7,0,16,dzrl); //多功能電子日歷
write_yhanzi(2,2,0,yangli); //陽(0) 歷(1)
write_yhanzi(2,4,0,nongli); //農(0) 歷(1)
// write_yhanzi(2,6,0,0x00); //時間
// write_yhanzi(2,6,0,shijian); //時間
write_shu16(1*2,4*8,0x20,0);
write_yhanzi(1,2,4*16,qita[0]); //年
write_yhanzi(1,2,6*16,qita[1]); //月
write_yhanzi(2,4,5*16,qita[6]); //星期
dis_shijian(); //顯示時間
write_yhanzi(1,6,7*16,wendu_fuhao); //℃
}
/***********************18b20初始化函數*****************************/
void init_18b20()
{
bit q;
dq = 1; //把總線拿高
delay_uint(1); //15us
dq = 0; //給復位脈沖
delay_uint(80); //750us
dq = 1; //把總線拿高 等待
delay_uint(10); //110us
q = dq; //讀取18b20初始化信號
delay_uint(20); //200us
dq = 1; //把總線拿高 釋放總線
}
/*************寫18b20內的數據***************/
void write_18b20(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{ //寫數據是低位開始
dq = 0; //把總線拿低寫時間隙開始
dq = dat & 0x01; //向18b20總線寫數據了
delay_uint(5); // 60us
dq = 1; //釋放總線
dat >>= 1;
}
}
/*************讀取18b20內的數據***************/
uchar read_18b20()
{
uchar i,value;
for(i=0;i<8;i++)
{
dq = 0; //把總線拿低讀時間隙開始
value >>= 1; //讀數據是低位開始
dq = 1; //釋放總線
if(dq == 1) //開始讀寫數據
value |= 0x80;
delay_uint(5); //60us 讀一個時間隙最少要保持60us的時間
}
return value; //返回數據
}
/*************讀取溫度的值 讀出來的是小數***************/
uint read_temp()
{
uint value;
uchar low; //在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳過64位ROM
write_18b20(0x44); //啟動一次溫度轉換命令
delay_uint(50); //500us
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳過64位ROM
write_18b20(0xbe); //發出讀取暫存器命令
EA = 0;
low = read_18b20(); //讀溫度低字節
value = read_18b20(); //讀溫度高字節
EA = 1;
value <<= 8; //把溫度的高位左移8位
value |= low; //把讀出的溫度低位放到value的低八位中
value *= 0.625; //轉換到溫度值 小數
return value; //返回讀出的溫度 帶小數
}
全部資料51hei下載地址:
單片機多功能萬年歷溫度(12864液晶顯示).zip
(275.64 KB, 下載次數: 112)
2020-6-21 13:57 上傳
點擊文件名下載附件
多功能萬年歷
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1