04 數碼管 SMG_Ser.pdf
(4.74 MB, 下載次數: 61)
2021-1-7 18:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
03 HC595_Drive.pdf
(6.78 MB, 下載次數: 55)
2021-1-7 18:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
WQX-15開發板02 模塊功能展示.jpg (3.18 MB, 下載次數: 64)
下載附件
2021-1-7 18:41 上傳
兩片74HC595驅動8位數碼管.png (233.15 KB, 下載次數: 68)
下載附件
2021-1-7 18:42 上傳
數碼管顯示原理.png (187.83 KB, 下載次數: 55)
下載附件
2021-1-7 22:02 上傳
//以下代碼是主文件的代碼
//************************************************************************************
// 數碼管顯示1、2、3、4、5、6、7、8
//************************************************************************************
#include "STC89.H" //頭文件包含
#include <intrins.h> //頭文件包含
typedef unsigned char u8; //重新定義數據類型名
typedef unsigned short u16; //重新定義數據類型名
typedef unsigned long u32; //重新定義數據類型名
#include <HC595.H> //調用74HC595的底層驅動文件(必須寫這里)
#include <SMG_Ser.H> //調用數碼管的文件(必須寫這里)
void SMG_Allot() //數碼管的數據分配
{
static u8 xdata count; //靜態變量
count++;
if(count>200) //每200次進來執行一次
{
count=0;
SMG_Write_Buffer[0]=1; //第1位數碼管顯示內容
SMG_Write_Buffer[1]=2; //第2位數碼管顯示內容
SMG_Write_Buffer[2]=3; //第3位數碼管顯示內容
SMG_Write_Buffer[3]=4; //第4位數碼管顯示內容
SMG_Write_Buffer[4]=5; //第5位數碼管顯示內容
SMG_Write_Buffer[5]=6; //第6位數碼管顯示內容
SMG_Write_Buffer[6]=7; //第7位數碼管顯示內容
SMG_Write_Buffer[7]=8; //第8位數碼管顯示內容
}
SMG_Display_Ser(); //執行數碼管顯示函數
}
void main() //主函數
{
HC595_Init(); //初始化74HC595管腳
while(1) //主函數大循環
{
SMG_Allot(); //循環調用數碼管數據分配函數
}
}
//******************************************************************************************************************//******************************************************************************************************************
//以下代碼是74HC595的驅動代碼
//文件名是:HC595.h
#ifndef HC595_Drive //如果沒有找到這個標簽
#define HC595_Drive //那么就打一個這個標簽
sbit HC595_DS=P2^2; //74HC595的數據腳
sbit HC595_ST=P2^3; //74HC595的顯示控制腳
sbit HC595_SH=P2^4; //74HC595的時鐘腳
unsigned char HC595_Write_Buffer[2];//74HC595芯片的數據緩存
void HC595_Init() //74HC595初始化IO口
{
HC595_DS=0;
HC595_ST=0;
HC595_SH=0;
}
void HC595_Write_Data_Drive() //74HC595 數據發送函數
{
u8 i; //變量i 用于移位
for(i=0;i<8;i++)
{
HC595_SH=0; //時鐘拉低
HC595_DS=HC595_Write_Buffer[1]&0x80;//數據最高位拷貝
HC595_Write_Buffer[1]<<=1; //數據左移
HC595_SH=1; //時鐘拉低
}
for(i=0;i<8;i++)
{
HC595_SH=0; //時鐘拉低
HC595_DS=HC595_Write_Buffer[0]&0x80;//數據最高位拷貝
HC595_Write_Buffer[0]<<=1; //數據左移
HC595_SH=1; //時鐘拉低
}
HC595_ST=1; //顯示控制腳拉高 顯示輸出
HC595_DS=0; //數據腳歸0
HC595_ST=0; //控制腳歸0
HC595_SH=0; //時鐘腳歸0
}
#endif
//******************************************************************************************************************
//******************************************************************************************************************
//以下代碼是數碼管的驅動代碼
//文件名是:SMG_Ser.h
#ifndef SMG_Ser //如果沒有找到這個標簽
#define SMG_Ser //那么就打一個這個標簽
u8 xdata SMG_Write_Buffer[8]; //八位數碼管的顯存
u8 code SMG_Duan_Buffer[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
u8 code SMG_Wei_Buffer[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void SMG_Display_Ser() //數碼管顯示刷新函數
{
static u8 count=0; //count取值范圍是0~7,每次顯示一位數碼管
switch(count)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
HC595_Write_Buffer[0]=SMG_Duan_Buffer[SMG_Write_Buffer[count]];
//通過數碼管顯示緩存0~7的值,查找數碼管duan碼的值,送人74HC595的顯存0,送入0#595芯片
HC595_Write_Buffer[1]=SMG_Wei_Buffer[count];
//通過count,查找數碼管wei碼的值,送人74HC595的顯存1,送入1#595芯片
HC595_Write_Data_Drive();//執行595數據的發送
break;
}
count++;
count=count%8;//限制count的值,取值范圍是0~7;
}
#endif
新建工程 包含以上上個.h文件。配置好工程之后 再編譯。
|