欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)ds1302日歷數(shù)字鐘數(shù)碼管顯示程序
[打印本頁]
作者:
eyyye
時間:
2018-12-25 15:45
標(biāo)題:
單片機(jī)ds1302日歷數(shù)字鐘數(shù)碼管顯示程序
在此附程序源碼,希望幫助到由需要的小伙伴!
單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sclk = P1^2; //ds1302時鐘脈沖引腳
sbit dio = P1^1; //ds1302輸入引腳
sbit ce = P1^0; //ds1302片選引腳
sbit beep = P1^7; //蜂鳴器引腳
// 顯示部分引腳定義
sbit din = P2^6; // 串行數(shù)據(jù)輸出,接CH451的數(shù)據(jù)輸入
sbit load=P3^3; //串行命令加載,上升延激活
sbit dout=P2^7; //INT1,鍵盤中斷和鍵值數(shù)據(jù)輸入,接CH451的數(shù)據(jù)輸出
sbit dclk = P2^5; //串行數(shù)據(jù)時鐘上升延激活
//ch452命令定義
#define CH452_RESET 0x0201 // 復(fù)位
#define CH452_SYSOFF 0x0400 // 關(guān)閉顯示、關(guān)閉鍵盤
#define CH452_SYSON1 0x0401 // 開啟顯示
#define CH452_SYSON2 0x0403 // 開啟顯示、鍵盤
#define CH452_DIG4 0x0c00 // 數(shù)碼管位4顯示,需另加8位數(shù)據(jù)
#define CH452_DIG5 0x0d00 // 數(shù)碼管位5顯示,需另加8位數(shù)據(jù)
#define CH452_DIG6 0x0e00 // 數(shù)碼管位6顯示,需另加8位數(shù)據(jù)
#define CH452_DIG7 0x0f00 // 數(shù)碼管位7顯示,需另加8位數(shù)據(jù)
#define h 12
#define m 0
#define s 0
unsigned char code number[]={0xbd,0x18,0xd5,0xd9,0x78,0xe9,0xed,0x98,0xfd,0xf9};
//鍵盤部分
uchar keycode,b,d,z,zz;
//按鍵延時部分
void Delay200ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 7;
j = 78;
k = 167;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void CH452_Read(void)
{ uchar cmd1;
uint i,j;
cmd1=0x07; //讀按鍵的命令字
load=0;
for(i=0;i!=4;i++) // 只需要發(fā)出高4位,多發(fā)也可以,但應(yīng)該確保最后留下的4位是該命令碼
{
din=cmd1&1;
dclk=0;
cmd1>>=1; //往右移一位
dclk=1; //產(chǎn)生時鐘上升沿鎖通知CH451輸入位數(shù)據(jù)
}
load=1; //產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)
for(j=0;j<100;j++){ }
keycode=0; //清除keycode
for(i=0;i!=7;i++)
{
keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后
if (dout)
{ keycode++;} //從高到低讀入451的數(shù)據(jù)
// keycode|=CH452_DOUT;
dclk=0; //產(chǎn)生時鐘下升沿通知CH451輸出下一位
dclk=1;
}
}
// ch452寫程序
void ch451_write(uint command)
{
char i;
load=0;
for(i=0;i<12;i++){ //送入12位數(shù)據(jù),低位在前
din = command&1;
dclk =0;
command>>=1;
dclk=1; //上升沿有效
}
load=1;
}
//顯示程序
void display1(uchar minute10,minute,second10,second)
{
ch451_write(CH452_DIG4 | number[minute10]);
ch451_write(CH452_DIG5 | number[minute]|0x02);
ch451_write(CH452_DIG6 | number[second10]);
ch451_write(CH452_DIG7 | number[second]);
}
//顯示程序
void display2(uchar z,zz,nian10,nian)
{
ch451_write(CH452_DIG4 | 0);
ch451_write(CH452_DIG5 | 0);
ch451_write(CH452_DIG6 | number[nian10]);
ch451_write(CH452_DIG7 | number[nian]);
}
//顯示程序
void display3(uchar yue10,yue,ri10,ri)
{
ch451_write(CH452_DIG4 | number[yue10]);
ch451_write(CH452_DIG5 | number[yue]);
ch451_write(CH452_DIG6 | number[ri10]);
ch451_write(CH452_DIG7 | number[ri]);
}
//ds1302時序部分程序
void write_1302(uchar add,dat)//寫數(shù)據(jù) add 是addres 地址 dat 是數(shù)據(jù)
{
uchar i,temp;
temp=add; // 把a(bǔ)dd地址給 temp
ce=0;
_nop_();
sclk=0;
_nop_();
ce=1;
_nop_();
for(i=0;i<8;i++)
{
sclk=0;
_nop_();
if((temp&0x01)==0x01)// 剛才把地址給了temp 現(xiàn)在和1與然后一位一位的給dio 前面定義了dio是引腳
dio=1;
else
dio=0;
temp>>=1;
sclk=1;
_nop_();
}
temp=dat;
for(i=0;i<8;i++)
{
sclk=0;
_nop_();
if((temp&0x01)==0x01)
dio=1;
else
dio=0;
temp>>=1;
sclk=1;
_nop_();
}
ce=0;
sclk=0;
}
uchar read_1302(uchar add)// 讀數(shù)據(jù)
{
uchar dat,dat1,i,temp;
temp=add;
ce=0;
_nop_();
sclk=0;
_nop_();
ce=1;
for(i=0;i<8;i++)
{
sclk=0;
_nop_();
if((temp&0x01)==0x01)
dio=1;
else
dio=0;
temp>>=1;
sclk=1;
_nop_();
}
for(i=0;i<8;i++)
{
sclk=0;
_nop_();
if(dio)
dat|=0x80;
if(i<7)
dat>>=1;
sclk=1;
}
dat1=dat/16;
dat=dat%16;
dat=dat1*10+dat;
ce=0;
sclk=0;
return dat;
}
//數(shù)字調(diào)整
uint tiaozheng ( uint Q){
uint a;
a = Q;
if(Q>15) {
a=a+6;
}
if(Q>25) {
a=a+6;
}
if(Q>35) {
a=a+6;
}
if(Q>45) {
a=a+6;
}
if(Q>55) {
a=a+6;
}
return a;
}
//主函數(shù)部分
void main()
{
unsigned int minute;
unsigned int second;
unsigned int shi;
unsigned int ri;
unsigned int yue;
unsigned int nian;
b=0;
d=0;
ch451_write(CH452_RESET); // 開啟顯示
ch451_write(CH452_SYSON2); // 開啟顯示
write_1302(0x8e,0x00); //開寫保護(hù)
write_1302(0xc0,0xfe);
write_1302(0xc2,0xff);
write_1302(0x80,0x30); //秒寫入 (地址+數(shù)據(jù))
write_1302(0x82,0x59); //分寫入
write_1302(0x84,0x11); //時寫入
write_1302(0x86,0x11); //日寫入
write_1302(0x88,0x01); //月寫入
write_1302(0x8c,0x18); //年寫入
write_1302(0x8e,0x80); //關(guān)寫保護(hù)
display3(1,5,0,3);
while(1){
write_1302(0x8e,0x00); //開寫保護(hù)
second=read_1302(0x81); //讀秒
minute=read_1302(0x83); //讀分鐘
shi=read_1302(0x85); //讀小時
ri=read_1302(0x87); //讀日
yue=read_1302(0x89); //讀月
nian=read_1302(0x8d); //讀年
write_1302(0x8e,0x80); //關(guān)寫保護(hù)
CH452_Read();
//功能鍵作用
if(keycode==0x4c){
Delay200ms();
CH452_Read();
if(keycode==0x4c){
b++;
if (b==7){
b=0;
}
}
}
if(keycode==0x4f){
Delay200ms();
CH452_Read();
if(keycode==0x4f){
d++;
if (d==7){
d=0;
}
}
}
if (keycode==0x44){
Delay200ms();
CH452_Read();
if (keycode==0x44){
display2(0,0,nian/10,nian%10);
b=0;
}
}
if (keycode==0x45){
Delay200ms();
CH452_Read();
if (keycode==0x45){
display1(yue/10,yue%10,ri/10,ri%10);
b=0;
}
}
if (keycode==0x46){
Delay200ms();
CH452_Read();
if (keycode==0x46){
display1(shi/10,shi%10,minute/10,minute%10);
b=0;
}
}
if (keycode==0x47){
Delay200ms();
CH452_Read();
if (keycode==0x47){
display1(0,0,second/10,second%10);
b=6;
}
}
if(b==1){
display2(0,0,nian/10,nian%10);
}
if(b==2){
display2(0,0,yue/10,yue%10);
}
if(b==3){
display2(0,0,ri/10,ri%10);
}
if(b==4){
display2(0,0,shi/10,shi%10);
}
if(b==5){
display2(0,0,minute/10,minute%10);
}
if(b==6){
display2(0,0,second/10,second%10);
}
//選擇加減鍵
//加減年
if(d==1){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
nian++;
nian = tiaozheng(nian);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x8c,nian); //年寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
nian=read_1302(0x8d); //讀年
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,nian/10,nian%10);
b=1;
}
}
if(d==1){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
nian--;
nian = tiaozheng(nian);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x8c,nian); //年寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
nian=read_1302(0x8d); //讀年
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,nian/10,nian%10);
b=1;
}
}
}
}
//加減月
if(d==2){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
yue++;
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x88,yue); //月寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
yue=read_1302(0x89); //讀月
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,yue/10,yue%10);
b=2;
}
}
if(d==2){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
yue--;
yue = tiaozheng(yue);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x88,yue); //月寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
yue=read_1302(0x89); //讀月
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,yue/10,yue%10);
b=2;
}
}
}
}
//加減日
if(d==3){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
ri++;
ri = tiaozheng(ri);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x86,ri); //日寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
ri=read_1302(0x87); //讀日
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,ri/10,ri%10);
b=3;
}
}
if(d==3){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
ri--;
ri = tiaozheng(ri);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x86,ri); //日寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
ri=read_1302(0x87); //讀日
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,ri/10,ri%10);
b=3;
}
}
}
}
//加減小時
if(d==4){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
shi++;
shi = tiaozheng(shi);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x84,shi); //小時寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
shi=read_1302(0x85); //讀小時
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,shi/10,shi%10);
b=4;
}
}
if(d==4){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
shi--;
shi = tiaozheng(shi);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x84,shi); //小時寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
shi=read_1302(0x85); //讀小時
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,shi/10,shi%10);
b=4;
}
}
}
}
//加減分鐘
if(d==5){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
minute++;
minute = tiaozheng(minute);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x82,minute); //分寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
minute=read_1302(0x83); //讀分
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,minute/10,minute%10);
b=5;
}
}
if(d==5){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
minute--;
minute = tiaozheng(minute);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x82,minute); //分寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
minute=read_1302(0x83); //讀分
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,minute/10,minute%10);
b=5;
}
}
}
}
//加減秒
if(d==5){
CH452_Read();
if (keycode==0x4d){
Delay200ms();
CH452_Read();
if (keycode==0x4d){
second++;
second = tiaozheng(second);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x80,second); //秒寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
second=read_1302(0x81); //讀秒
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,second/10,second%10);
b=6;
}
}
if(d==5){
CH452_Read();
if (keycode==0x4e){
Delay200ms();
CH452_Read();
if (keycode==0x4e){
second--;
second = tiaozheng(second);
write_1302(0x8e,0x00);//開寫保護(hù)
write_1302(0x80,second); //秒寫入
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
write_1302(0x8e,0x00);//開寫保護(hù)
second=read_1302(0x81); //讀秒
write_1302(0x8e,0x80);//關(guān)寫保護(hù)
display2(0,0,second/10,second%10);
b=6;
}
}
}
}
//蜂鳴器部分
if(h==shi){
if (m==minute){
if (second==s){
beep = 0;
Delay200ms();
beep = 1;
}
}
}
}//while結(jié)束
}//main結(jié)束
復(fù)制代碼
所有資料51hei提供下載:
A最終程序.rar
(41.94 KB, 下載次數(shù): 23)
2018-12-25 15:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-12-25 18:20
補(bǔ)全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1