标题:
74hc595的单片机驱动程序
[打印本页]
作者:
jehu
时间:
2017-8-31 10:13
标题:
74hc595的单片机驱动程序
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)
2017-8-31 10:13 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1