|
本帖最后由 13680112599 于 2025-2-1 10:45 編輯
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
uchar code Table[] =
{ // 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
//-----------------------------------------------------------------------------
sbit SER = P1^0; //串行數(shù)據(jù)輸入端
sbit STCP = P1^1; //時鐘脈沖信號——上升沿有效 存儲寄存器時鐘輸入端,并行輸出
sbit SHCP = P1^2; //輸入信號————上升沿有效 移位寄存器時鐘輸入端
unsigned int n1,n2;
void Display (); // 數(shù)碼管顯示
void SMG_Int(uchar Dat); // 數(shù)碼管單字節(jié)串行移位函數(shù)
//*****************************************************************************
// 主程序
void main ()
{
n1=2233;
n2=5566;
while(1)
{
n1++;
n2++;
if(n1>=9999)
n1=0;
if(n2>=9999)
n2=0;
Display ();
}
}
void Display ()
{
uchar i;
//顯示第1位
i = Table[n2%10];
SMG_Int(i);
SMG_Int(0x01);
STCP = 0; //數(shù)據(jù)并行輸出,(借助上升沿)
_nop_();
_nop_();
STCP = 1;
//顯示第2位
i = Table[n2/10%10];
SMG_Int(i);
SMG_Int(0x02);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第3位 -
i = Table[n2/100%10];
SMG_Int(i);
SMG_Int(0x04);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第4位
i = Table[n2/1000%10];
SMG_Int(i);
SMG_Int(0x08);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第5位
i = Table[n1%10];
SMG_Int(i);
SMG_Int(0x10);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第6位
//if(shan<10)
i = Table[n1/10%10];
SMG_Int(i);
SMG_Int(0x20);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第7位
i = Table[n1/100%10];
SMG_Int(i);
SMG_Int(0x40);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
//顯示第8位
i = Table[n1/1000%10];
SMG_Int(i);
SMG_Int(0x80);
STCP = 0;
_nop_();
_nop_();
STCP = 1;
}
void SMG_Int(uchar Dat) //通過8次循環(huán)將8位數(shù)據(jù)移入74HC595
{
uchar i;
for(i=8;i>=1;i--)
{
if (Dat & 0x80)
{
SER = 1;
}
else
{
SER = 0;
}
Dat <<= 1;
SHCP = 0;
_nop_();
_nop_();
SHCP = 1;
}
}
|
|