74hc595驱动数码管
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- #define HIGH 1
- #define LOW 0
- #define TH0_VALUE 0xDC
- #define TL0_VALUE 0x00
- #define CNT_VOICE_TIME 60
- //对芯片74hc164管脚定义
- sbit IO_74HC595_DATA = P1^7;
- sbit IO_74HC595_CLK = P1^6;
- sbit IO_74HC595_LATCH_CLK = P1^5;
- sbit IO_74HC595_DATA1 = P1^4;
- sbit IO_74HC595_CLK1 = P1^3;
- sbit IO_74HC595_LATCH_CLK1 = P1^2;
- sbit IO_BEEP = P1^4;
- //写数据到74hc595
- u8 code LedData[]=
- {
- 0xC0, //"0"
- 0xF9, //"1"
- 0xA4, //"2"
- 0xB0, //"3"
- 0x99, //"4"
- 0x92, //"5"
- 0x82, //"6"
- 0xF8, //"7"
- 0x80, //"8"
- 0x90, //"9"
- };
- //变量定义
- u8 u8SystemTime; //全部变量前面要注明类型
- u8 BeepTime;
- u8 u8Voice_Time_Cnt;
- u8 Count;
- u8 DspBuf[2]=0; //存储变量定义
- //时间变量定义
- u8 Second = 0;
- u8 Minute = 0;
- u8 Hour = 0;
- /***********************************************************
- 函数名称: void DelayUs(u8 t)
- 函数功能: 大致延时长度如下 t*2 + 5
- 入口参数: t
- 出口参数: 无
- 备 注:
- ***********************************************************/
- void DelayUs(u8 t)
- {
- while(--t);
- }
- /***********************************************************
- 函数名称: void DelayUs(u16 t)
- 函数功能: 大致延时长度如下 1ms
- 入口参数: t
- 出口参数: 无
- 备 注:
- ***********************************************************/
- void DelayMs(u16 t)
- {
- while(--t)
- {
- DelayUs(245);
- DelayUs(245);
- }
- }
- //发送数据到74hc595
- void HC595_SendByte(u8 Byte)
- {
- u8 i;
- for(i = 0; i < 8; i++)
- {
- IO_74HC595_DATA = Byte & 0x80;
- IO_74HC595_CLK = HIGH;
- IO_74HC595_CLK = LOW;
- Byte <<= 1;
- }
- }
- //74hc595输出数据
- void HC595_OutData(void)
- {
- IO_74HC595_LATCH_CLK = LOW;
- _nop_();
- _nop_();
- _nop_();
- IO_74HC595_LATCH_CLK = HIGH;
- _nop_();
- _nop_();
- _nop_();
- IO_74HC595_LATCH_CLK = LOW;
- _nop_();
- _nop_();
- _nop_();
-
- }
- //2222发送数据到74hc595
- void HC595_Send2Byte(u8 Byte)
- {
- u8 i;
- for(i = 0; i < 8; i++)
- {
- IO_74HC595_DATA1 = Byte & 0x80; //先送高位
- IO_74HC595_CLK1 = HIGH;
- IO_74HC595_CLK1 = LOW;
- Byte <<= 1;
- }
- }
- //2222 74hc595输出数据
- void HC595_Out2Data(void)
- {
- IO_74HC595_LATCH_CLK1 = LOW;
- _nop_();
- _nop_();
- _nop_();
- IO_74HC595_LATCH_CLK1 = HIGH;
- _nop_();
- _nop_();
- _nop_();
- IO_74HC595_LATCH_CLK1 = LOW;
- _nop_();
- _nop_();
- _nop_();
-
- }
- //刷新数码管
- void HC595_Refresh(void)
- {
- HC595_SendByte(DspBuf[0]);
- HC595_OutData();
-
- HC595_Send2Byte(DspBuf[1]);
- HC595_Out2Data();
- }
- //定时器初始化
- void T0_Init(void)
- {
- TMOD |= 0x01;
- TH0 = TH0_VALUE;
- TL0 = TL0_VALUE;
- EA = 1; //打开总中断
- ET0 = 1; //打开中断使能
- TR0 = 1; //开启中断
- }
- //定时器中断服务
- void Time0_ISR(void) interrupt 1
- {
- TH0 = TH0_VALUE;
- TL0 = TL0_VALUE;
- u8SystemTime++;
- if(u8SystemTime == 100)
- {
- u8SystemTime = 0;
- Second++;
- if(Second == 10)
- {
- Second = 0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
74hc595驱动.zip
(39.29 KB, 下载次数: 8)
|