|
想請教一下各位大神,我做了一個用7219級聯(lián)顯示時分秒,年月日的程序;實物顯示沒有問題,但是仿真只顯示第一個7219的,第二個的年月日不顯示;
51hei圖片_20220627213109.jpg (1.45 MB, 下載次數(shù): 30)
下載附件
2022-6-27 21:38 上傳
51hei圖片_20220627213825.jpg (3.33 MB, 下載次數(shù): 21)
下載附件
2022-6-27 21:38 上傳
單片機(jī)源程序如下:
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "ds1302.h"
typedef unsigned int u16; //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
sbit key=P3^7;
sbit key1=P3^6;
u8 num;
u16 DisplayData[17];
u8 code smgduanyin [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code smgduanyang [10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 code smgduan7219 [10]={0,1,2,3,4,5,6,7,8,9};
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
void delayms(u16 xms)
{
u16 i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/*******************************************************************************
* 函 數(shù) 名 : datapros()
* 函數(shù)功能 : 時間讀取處理轉(zhuǎn)換函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void datapros()
{
Ds1302ReadTime();
DisplayData[8] = smgduan7219[TIME[2]/16]; //時
DisplayData[7] = smgduan7219[TIME[2]&0x0f];
DisplayData[6] = 0x0a;
DisplayData[5] = smgduan7219[TIME[1]/16]; //分
DisplayData[4] = smgduan7219[TIME[1]&0x0f];
DisplayData[3] = 0x0a;
DisplayData[2] = smgduan7219[TIME[0]/16]; //秒
DisplayData[1] = smgduan7219[TIME[0]&0x0f];
Ds1302ReadTime();
DisplayData[16]= smgduan7219[2];
DisplayData[15]= smgduan7219[0];
DisplayData[14]= smgduan7219[TIME[6]/16]; //年
DisplayData[13]= smgduan7219[TIME[6]&0x0f];
DisplayData[12]= smgduan7219[TIME[4]/16]; //月
DisplayData[11]= smgduan7219[TIME[4]&0x0f];
DisplayData[10] = smgduan7219[TIME[3]/16]; //日
DisplayData[9] = smgduan7219[TIME[3]&0x0f];
DisplayData[17] =smgduanyang[TIME[5]&0x0f]; //周
}
void max7219send(uchar add,uchar dat)
{
uchar ads,i,j;
i=0;
while(i<16)
{
if(i<8)
{
ads=add;
}
else
{
ads=dat;
}
for(j=0;j<8;j++)
{
clk7219=0;
din7219=ads&0x80;
ads=ads<<1;
clk7219=1;
}
i=i+8;
}
}
void write7219value1(uchar add1,uchar dat1)
{
sc7219=0;
max7219send(add1,dat1);
sc7219=1;
}
void write7219value2(uchar add2,uchar dat2)
{
sc7219=0;
max7219send(add2,dat2);
max7219send(0x00,0x00);
sc7219=1;
}
void max7219init()
{
write7219value1(0x0c,0x01);
write7219value1(0x0b,0x07);
write7219value1(0x0a,0xff);
write7219value1(0x09,0xff);
write7219value1(0x0f,0x00);
write7219value2(0x0c,0x01);
write7219value2(0x0b,0x07);
write7219value2(0x0a,0xff);
write7219value2(0x09,0xff);
write7219value2(0x0f,0x00);
}
void main()
{
uchar i,z;
Ds1302Init(); //第一次初始化后就可以注釋該條語句,這樣下次重啟就不會再次初始化了
max7219init();
while(1)
{
datapros(); //數(shù)據(jù)處理函數(shù)
for(i=1;i<9;i++)
{
write7219value1(i,DisplayData[ i]);
write7219value2(i,DisplayData[i+8]);
}
}
}
|
|