標(biāo)題:
單片機(jī)+DS12887+數(shù)碼管顯示程序
[打印本頁(yè)]
作者:
3花木城
時(shí)間:
2021-12-21 09:21
標(biāo)題:
單片機(jī)+DS12887+數(shù)碼管顯示程序
幫一個(gè)朋友做程序,也是學(xué)習(xí)吧。哈哈,直接上代碼,驅(qū)動(dòng)部分也是在51HEI學(xué)習(xí)的。
制作出來(lái)的實(shí)物圖如下:
6f1e449bf69ad0369b0c765ef409eea.jpg
(156.96 KB, 下載次數(shù): 64)
下載附件
2021-12-21 09:19 上傳
單片機(jī)源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr P4 = 0xc0; //I/O端口4 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
//位描述 P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0
//初始值=1111,1111 1 1 1 1 1 1 1 1
sbit P47 = P4^7; //I/O口P4.7
sbit P46 = P4^6; //I/O口P4.6
sbit P45 = P4^5; //I/O口P4.5
sbit P44 = P4^4; //I/O口P4.4
sbit P43 = P4^3; //I/O口P4.3
sbit P42 = P4^2; //I/O口P4.2
sbit P41 = P4^1; //I/O口P4.1
sbit P40 = P4^0; //I/O口P4.0
sbit RST = P4^7; //復(fù)位腳,可通過(guò)編程器設(shè)置
sbit EX_LVD = P4^6; //外部低壓檢測(cè)引腳
sbit P4SPISCLK = P4^3; //SPI總線的時(shí)鐘腳
sbit P4SPIMISO = P4^2; //SPI總線的主出從入腳
sbit P4SPIMOSI = P4^1; //SPI總線的主入從出腳
sbit P4SPISS = P4^0; //SPI總線的從機(jī)選擇腳
sbit P4CEX1 = P4^3; //比較/捕獲/PWM1外部引腳
sbit P4CEX0 = P4^2; //比較/捕獲/PWM0外部引腳
sbit P4ECI = P4^1; //比較/捕獲/PWM模塊的外部時(shí)鐘輸入腳(最大值為Fosc/2)
sbit P4TXD2 = P4^3; //串口2數(shù)據(jù)輸出腳
sbit P4RXD2 = P4^2; //串口2數(shù)據(jù)輸入腳
sfr P4SW = 0xbb; //P4口的功能開關(guān) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
//位描述 - LVD_P4.6 ALE_P4.5 NA_P4.4 - - - -
//初始值=x000,xxxx x 0 0 0 x x x x
#define P46EN 0x40 //傳統(tǒng)的EA腳 0:為L(zhǎng)VD的信號(hào)引入腳 1:為P4.6
#define P45EN 0x20 //傳統(tǒng)的ALE腳 0:仍為ALE 1:為P4.5
#define P44EN 0x10 //傳統(tǒng)的PSEN腳 0:無(wú)任何功能 1:為P4.4
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
#define Ds_Bus P0
#define smgp1 P1
sbit DS_CS = P2^6;
sbit DS_AS = P4^5;
sbit DS_RW = P3^6;
sbit DS_DS = P3^7;
uchar count,shi,fen,miao,s1num,week=0,i,day=1,yue=1,year1=0,year2,year3,year4;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
//往DS12CR887寫數(shù)據(jù)函數(shù),add=地址,date=數(shù)據(jù)。
void ds_write(uchar add,uchar date)
{
DS_CS=0; DS_DS=1; DS_RW=1; DS_AS=1;
Ds_Bus=add;
DS_AS=0; DS_RW=0;
Ds_Bus=date;
DS_RW=1; DS_AS=1; DS_CS=1;
}
//讀取DS12CR887的數(shù)據(jù)函數(shù)
uchar ds_read(uchar add)
{
uchar z;
DS_AS=1; DS_DS=1;DS_RW=1;DS_CS=0;
Ds_Bus=add;
DS_AS=0; DS_DS=0;
Ds_Bus=0xff;
z=Ds_Bus;
DS_DS=1; DS_AS=1; DS_CS=1;
return z;
}
//DS12CR887初始化函數(shù)
void ds_int()
{
DS_AS=0; DS_DS=0; DS_RW=0;
ds_write(0x0a,0x20);//DS12CR887寄存器A功能設(shè)置,開啟時(shí)鐘振蕩器
ds_write(0x0b,0x06);//寄存器B功能設(shè)置,不開啟鬧鐘中斷使能,數(shù)據(jù)模式為二進(jìn)制,24小時(shí)模式。
}
void display()
{
// P1=(table[minute%10]& 0x7f); //加0X7F,是一個(gè)小數(shù)點(diǎn)
miao=ds_read(0); //讀取DS12CR887的秒
//write1632GDRAM(7,2,num1632[sec/10]);
// write1632GDRAM(8,2,num1632[sec%10]);
// miao=ds_read(0);
smgp1=(table[miao/10]);
P2_0 = 0;
delay(5);
P2_0 = 1;
smgp1=(table[miao%10]& 0x7f);
P2_1 = 0;
delay(5);
P2_1 = 1;
fen=ds_read(2);
smgp1=table[fen/10];
P2_2 = 0;
delay(5);
P2_2 = 1;
smgp1=table[fen%10];
P2_3 = 0;
delay(5);
P2_3 = 1;
}
/*演示主程序*/
void main(void)
{
unsigned int a;
ds_int(); //時(shí)鐘芯片初始化
while(1)
{
for(a=100;a>0;a--)
{
display();
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1