亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
DS1302數碼管時鐘仿真和源代碼
[打印本頁]
作者:
lids
時間:
2016-10-26 16:58
標題:
DS1302數碼管時鐘仿真和源代碼
這個只是讀取出時間,其它功能沒有寫出來,用了四位共陰數碼管顯示。
小數點閃爍 第3位數碼管倒置顯示小數點與第二位數碼管一起顯示“:”,1秒閃爍一次
仿真用了4個一位的數碼管和一個四位的數碼管,如果用一個四位的數碼管,可以修改程序把第三位的
小數點去掉
0.png
(29.08 KB, 下載次數: 51)
下載附件
2016-11-13 21:13 上傳
附件里面有源代碼與仿真文件:
時鐘.rar
(114.65 KB, 下載次數: 89)
2016-10-26 16:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
//這個只是讀取出時間,其它功能沒有寫出來,用了四位共陰數碼管顯示。
// 小數點閃爍 第3位數碼管倒置顯示小數點
// 與第二位數碼管一起顯示“:”,1秒閃爍一次
//仿真用了4個一位的數碼管和一個四位的數碼管
/**********************************
* DS1302簡單時間顯示 *
* 數碼管顯示 *
***********************************/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define W P2 //位選
#define D P0 //段選
sbit dio=P1^1; //數據口
sbit sclk=P1^0; //控制數據時鐘
sbit RST=P1^2; //使能端、復位端
/************按鍵引腳定義***********/
sbit s1=P3^0; //按鍵 加
sbit s2=P3^1; //按鍵 減
sbit s3=P3^2; //按鍵 選擇
char knum=0,snum,fnum;
/***********寫時分秒地址************/
#define write_shi 0x84
#define write_fen 0x82
#define write_miao 0x80
/***********讀時分秒地址************/
#define read_shi 0x85
#define read_fen 0x83
#define read_miao 0x81
char shi,fen,miao; //讀出數據存儲變量
//uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}; //不帶小數點
//uchar dd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數點
// 0 1 2 3 4 5 6 7 8 9 10 11
uchar code d[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00}; //共陰不帶小數點
uchar code dd[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};// 共陰帶小數點
void delay(uint z) //延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{ //delay(500);大約延時500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_1302(uchar add,dat) //寫函數 qx
{
uchar i,temp;
temp=add;
RST=0;
_nop_();
sclk=0;
_nop_();
RST=1;
_nop_();
for(i=0;i<8;i++)
{
sclk=0;
_nop_();
if((temp&0x01)==0x01)
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_();
}
RST=0;
sclk=0;
}
uchar read_1302(uchar add) //讀函數 qx
{
uchar dat,dat1,i,temp;
temp=add;
RST=0;
_nop_();
sclk=0;
_nop_();
RST=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;
RST=0;
sclk=0;
return dat;
}
void init_1302() //初始化函數 設置時間
{
write_1302(0x8e,0x00); //保護取消,可以進行讀寫操作
write_1302(write_miao,0x56);
write_1302(write_fen,0x49);
write_1302(write_shi,0x14);
write_1302(0x8e,0x80); //保護啟動,不能進行讀寫操作
}
void display(uchar shi,uchar fen,uchar miao) //顯示函數
{
if(knum==0)
{
snum=30;
fnum=30;
}
if(knum==1)
{
fnum++;
snum=30;
}
if(knum==2)
{
snum++;
fnum=30;
}
if(snum>=30)
{
P2=0x01; //位選
P0=d[shi/10]; //段選
delay(5);
P0=0X00;
//位選
//消隱
if(miao%2==0) //小數點閃爍
{
P2=0x02;
P0=dd[shi%10];
delay(5);
P0=0X00;
//消隱
}
else
{
P2=0x02;
P0=d[shi%10];
delay(5);
P0=0X00;
//消?
}
if(snum==60)
snum=0;
}
if(fnum>=30)
{
if(miao%2==0) //小數點閃爍 第3位數碼管倒置顯示小數點
//與第二位數碼管一起顯示“:”,1秒閃爍一次
{
P2=0x04;
P0=dd[fen/10];
delay(5);
P0=0X00;
} //消隱
else
{
P2=0x04;
P0=d[fen/10];
delay(5);
P0=0X00;
}
P2=0x08;
P0=d[fen%10];
delay(5);
P0=0X00;
//消隱
if(fnum==60)
fnum=0;
}
}
void read_sf()
{
shi=read_1302(read_shi);
fen=read_1302(read_fen);
miao=read_1302(read_miao);
display(shi,fen,miao);
}
void keyscan() //按鍵掃描函數
{
if(s3==0) //選擇按鍵按下
{
delay(10);
if(s3==0)
{
while(!s3)
display(shi,fen,miao); //加上這句,按鍵按下就不會閃
knum++;
if(knum==1) //分閃爍
{
write_1302(0x8e,0x00); //保護取消
write_1302(write_miao,0x80);
}
if(knum==3) //時鐘啟動
{
knum=0;
write_1302(write_miao,0x00);
write_1302(0x8e,0x80); //保護啟動
}
}
}
if(knum==1) //分鐘調節
{
if(s1==0) //加
{
delay(10);
if(s1==0)
{
while(!s1)
display(shi,fen,miao); //加上這句,按鍵按下就不會閃
fen++;
fen=fen/10*16+fen%10; //轉為16進制
if(fen==0x60)
fen=0x00;
write_1302(write_fen,fen); //寫入1302
read_sf(); //讀出時間,然后顯示
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2)
display(shi,fen,miao); //加上這句,按鍵按下就不會閃
fen--;
fen=fen/10*16+fen%10; //轉為16進制
if(fen==-1)
fen=0x59;
write_1302(write_fen,fen);
read_sf();
}
}
}
if(knum==2)
{
if(s1==0)
{
delay(10);
if(s1==0)
{
while(!s1)
display(shi,fen,miao); //加上這句,按鍵按下就不會閃
shi++;
shi=shi/10*16+shi%10; //轉為16進制
if(shi==0x24)
shi=0x00;
write_1302(write_shi,shi);
read_sf();
}
}
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2)
display(shi,fen,miao); //加上這句,按鍵按下就不會閃
shi--;
shi=shi/10*16+shi%10; //轉為16進制
if(shi==-1)
shi=0x23;
write_1302(write_shi,shi);
read_sf();
}
}
}
}
void main()
{
init_1302();
while(1)
{
read_sf();
keyscan();
display(shi,fen,miao);
}
}
復制代碼
作者:
GUOPK
時間:
2016-12-28 16:53
為什么在實物圖上不能正常顯示??
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1