?? hc595.c
字號:
/************************************************
文件:hc595.c
用途:
注意:內部8M晶振
創建:2008.4.1
修改:2008.4.1
Copy Right (c) www.avrvi.com AVR與虛擬儀器
************************************************/
#include "..\config.h"
const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4
0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9
0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f
volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小數點標志1代表有小數點point_pos表示小數點位置
/*************************************************************************
** 函數名稱:HC595初始化
** 功能描述:
** 輸 入:
** 輸出 :
** 全局變量:
** 調用模塊:
** 說明:
** 注意:
**************************************************************************/
void HC_595_init(void)
{
OE_DDR |= (1<<OE);
OE_PORT &= (1<<OE);
PORTB = 0x0F;
spi_init();
Seg7_Led_Buf[0]=16;
Seg7_Led_Buf[1]=16;
Seg7_Led_Buf[2]=16;
Seg7_Led_Buf[3]=16;
}
/*************************************************************************
** 函數名稱:HC595送數據
** 功能描述:
** 輸 入:
** 輸出 :
** 全局變量:
** 調用模塊:
** 說明:
** 注意:
**************************************************************************/
void HC_595_OUT(unsigned char data)
{
SS_L();
SPI_MasterTransmit(data);
SS_H();
}
/*************************************************************************
** 函數名稱:HC595刷新顯示
** 功能描述:
** 輸 入:
** 輸出 :
** 全局變量:
** 調用模塊:
** 說明:
** 注意:
**************************************************************************/
void Seg7_Led_Update(void)
{
HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]);
Seg7_Bit0_En();
delay_nus(60);
Seg7_Bit0_Dis();
HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
if((point==1)&&(point_pos==1))
HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
Seg7_Bit1_En();
delay_nus(60);
Seg7_Bit1_Dis();
HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]);
if((point==1)&&(point_pos==2))
HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
Seg7_Bit2_En();
delay_nus(60);
Seg7_Bit2_Dis();
HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
if((point==1)&&(point_pos==3))
HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
Seg7_Bit3_En();
delay_nus(60);
Seg7_Bit3_Dis();
}
/*************************************************************************
** 函數名稱:Hc595顯示整形數據
** 功能描述:
** 輸 入:0~9999
** 輸出 :
** 全局變量:
** 調用模塊:
** 說明:
** 注意:
**************************************************************************/
void Seg7_Led_display(unsigned int data)
{
if(data>9999) //錯誤處理,超出顯示范圍則全亮
{
HC_595_OUT(0xFF);
Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
}
else if(data>999)
{
Seg7_Led_Buf[3]=data/1000;
Seg7_Led_Buf[2]=(data%1000)/100;
Seg7_Led_Buf[1]=(data%100)/10;
Seg7_Led_Buf[0]=data%10;
Seg7_Led_Update();
}
else if(data>99)
{
Seg7_Led_Buf[3]=16;
Seg7_Led_Buf[2]=(data%1000)/100;
Seg7_Led_Buf[1]=(data%100)/10;
Seg7_Led_Buf[0]=data%10;
Seg7_Led_Update();
}
else if(data>9)
{
Seg7_Led_Buf[3]=16;
Seg7_Led_Buf[2]=16;
Seg7_Led_Buf[1]=(data%100)/10;
Seg7_Led_Buf[0]=data%10;
Seg7_Led_Update();
}
else
{
Seg7_Led_Buf[3]=16;
Seg7_Led_Buf[2]=16;
Seg7_Led_Buf[1]=16;
Seg7_Led_Buf[0]=data%10;
Seg7_Led_Update();
}
}
/*************************************************************************
** 函數名稱:HC595顯示浮點數據
** 功能描述:
** 輸 入:
** 輸出 :
** 全局變量:
** 調用模塊:
** 說明:
** 注意:
**************************************************************************/
void Seg7_Led_float(float data)
{
unsigned int temp;
/*
重要說明:data+=0.00001;其中0.00001為容錯值
解決float數據類型在計算機內部存儲的誤差問題,可以解決顯示問題
但是會引入新的計算誤差,如果精度要求大于0.00001建議更改容錯值或者將此處注釋掉
*/
data+=0.00001;
point=1;
if(data>999) //錯誤處理,超出顯示范圍則全亮
{
HC_595_OUT(0xFF);
Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
}
else if(data>99)
{
temp=data*10;
point_pos=1;
Seg7_Led_Buf[3]=temp/1000;
Seg7_Led_Buf[2]=(temp%1000)/100;
Seg7_Led_Buf[1]=(temp%100)/10;
Seg7_Led_Buf[0]=temp%10;
Seg7_Led_Update();
}
else if(data>9)
{
temp=data*100;
point_pos=2;
Seg7_Led_Buf[3]=temp/1000;
Seg7_Led_Buf[2]=(temp%1000)/100;
Seg7_Led_Buf[1]=(temp%100)/10;
Seg7_Led_Buf[0]=temp%10;
Seg7_Led_Update();
}
else
{
temp=data*1000;
point_pos=3;
Seg7_Led_Buf[3]=temp/1000;
Seg7_Led_Buf[2]=(temp%1000)/100;
Seg7_Led_Buf[1]=(temp%100)/10;
Seg7_Led_Buf[0]=temp%10;
Seg7_Led_Update();
}
point=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -