/****-----請閱讀ReadMe.txt進行實驗-----***********/
#define MAIN_Fosc 11059200L //定義主時鐘
#include "15W4KxxS4.H"
#include "tm1637.h"
u8 min=59;sec=50;
u8 count=0;
void Timer0Init(void) //20??@11.0592MHz
{
AUXR &= 0x7F; //?????12T??
TMOD &= 0xF0; //???????
TL0 = 0x00; //???????
TH0 = 0xB8; //???????
TF0 = 0; //??TF0??
TR0 = 1; //???0????
}
/***********************
功能描述:主函數
入口參數:無
返回值:無
************************/
int main()
{
u8 ch=0, p=0;
P0M1 = 0; P0M0 = 0; //設置P0.0~P0.7為準雙向口
P1M1 = 0; P1M0 = 0; //設置P1.0~P1.7為準雙向口
P2M0 = 0; P2M1 = 0; //設置P2.0~P2.7為準雙向口
P3M1 = 0; P3M0 = 0; //設置P3.0~P3.7為準雙向口
P4M1 = 0; P4M0 = 0; //設置P4.0~P4.7為準雙向口
P5M1 = 0; P5M0 = 0; //設置P5.0~P5.7為準雙向口
Timer0Init();
EA=1;ET0=1;
TM1637_NixieTubeDisplay();
TM1637_NixieTubeDisplayChar(min/10,0);
TM1637_NixieTubeDisplayChar(min%10,1);
TM1637_NixieTubeDisplayChar(sec/10,2);
TM1637_NixieTubeDisplayChar(sec%10,3);
while(1)
{
// if(fls==2)
// {
// maohao1();
// fls=0;
//}
}
}
void timer0_ISR() interrupt 1
{
count++;
if(count==50)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
}
TM1637_NixieTubeDisplayChar(min/10,0);
TM1637_NixieTubeDisplayChar(min%10,1);
}
TM1637_NixieTubeDisplayChar(sec/10,2);
TM1637_NixieTubeDisplayChar(sec%10,3);
}
}
- #include "tm1637.h"
- u8 NumDis[24]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0X6F,\
- 0x77,0x7C,0x39,0x5E,0x79,0x71,\
- 0x08,0x48,0x49,\
- 0x76,0x38,0x0E,0x50,0x37
- };//0123456789ABCDEF一二三HLJRS
- /**************************************
- 功能描述:延時函數
- 入口參數:u16 x ,該值為1時,延時1ms
- 返回值:無
- ***************************************/
- void delay_ms(u16 x)
- {
- u16 j,i;
- for(j=0;j<x;j++)
- {
- for(i=0;i<1100;i++);
- }
- }
- /**************************************
- 功能描述:延時函數
- 入口參數:u16 x ,該值為1時,延時us
- 返回值:無
- ***************************************/
- void delay_us(u16 n)
- {
- u16 j,i;
- for(j=0;j<n;j++)
- {
- for(i=0;i<7;i++);
- }
- }
- /**************************************
- 功能描述:TM1637開始函數
- 入口參數:無
- 返回值:無
- ***************************************/
- void TM1637_Start(void)
- {
- TM1637_DIO_OUT();
- TM1637_CLK = 1;
- TM1637_DIO = 1;
- delay_us(2);
- TM1637_DIO = 0;
- }
- /**************************************
- 功能描述:TM1637應答函數
- 入口參數:無
- 返回值:無
- ***************************************/
- void TM1637_Ack(void)
- {
- TM1637_DIO_IN();
- TM1637_CLK = 0;
- delay_us(5); //在第8個時鐘下降沿之后延時5us,開始判斷ACK信號
- while(TM1637_READ_DIO);
- TM1637_CLK = 1;
- delay_us(2);
- TM1637_CLK = 0;
- }
- /**************************************
- 功能描述:TM1637停止函數
- 入口參數:無
- 返回值:無
- ***************************************/
- void TM1637_Stop(void)
- {
- TM1637_DIO_OUT();
- TM1637_CLK = 0;
- delay_us(2);
- TM1637_DIO = 0;
- delay_us(2);
- TM1637_CLK = 1;
- delay_us(2);
- TM1637_DIO = 1;
- }
- /**************************************
- 功能描述:向TM1637寫一個字節
- 入口參數:u8 oneByte
- 返回值:無
- ***************************************/
- void TM1637_WriteByte(u8 oneByte)
- {
- u8 i;
- TM1637_DIO_OUT();
- for(i=0;i<8;i++)
- {
- TM1637_CLK = 0;
- if(oneByte&0x01) //低位在前
- {
- TM1637_DIO = 1;
- }
- else
- {
- TM1637_DIO = 0;
- }
- delay_us(3);
- oneByte=oneByte>>1;
- TM1637_CLK = 1;
- delay_us(3);
- }
- }
- /**************************************
- 功能描述:寫顯示寄存器
- 入口參數:無
- 返回值:無
- ***************************************/
- void TM1637_NixieTubeDisplay(void)
- {
- u8 i;
- TM1637_Start();
- TM1637_WriteByte(0x40);//40H顯示地址自加1模式
- TM1637_Ack();
- TM1637_Stop();
- TM1637_Start();
- TM1637_WriteByte(0xC0); //設置首地址
- TM1637_Ack();
-
- for(i=0;i<6;i++) //地址自加,不必每次都寫地址
- {
- TM1637_WriteByte(0xff); //送數據
- TM1637_Ack();
- }
- TM1637_Stop();
- TM1637_Start();
- TM1637_WriteByte(0x8f); //開顯示,最大亮度
- TM1637_Ack();
- TM1637_Stop();
- }
- /**************************************
- 功能描述:向指定地址顯示一個字節內容
- 入口參數:u8 ch,u8 p
- 返回值:無
- ***************************************/
- void TM1637_NixieTubeDisplayChar(u8 ch,u8 p)
- {
- if(ch>23) ch=0;//防止數組越界
- TM1637_Start();
- TM1637_WriteByte(0x44);//0x44固定模式有利于控制顯示位,0x40則采用顯示地址自加模式這里不使用
- TM1637_Ack();
- TM1637_Stop();
- TM1637_Start();
-
- TM1637_WriteByte(0xC0+p);//0X00地址開始顯示
- TM1637_Ack();
-
- TM1637_WriteByte(NumDis[ch]);//顯示
- TM1637_Ack();
- TM1637_Stop(); //V1.1
- }
復制代碼
|