?? pic-595.c
字號:
#include <pic.h>
#define CLK_595 RC3 // 移位時鐘----------74HC595 11#
//#define LOAD_595 RC4 //鎖存時鐘----------74HC595 12#
#define LOAD_595 RC0 //鎖存時鐘----------74HC595 12#
#define DATA_595 RC5 //數(shù)據(jù)--------------74HC595 14#
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
unsigned int ADC_Value;
unsigned long a;
unsigned char flag;
void delay_1ms(void);
void delay_nms(unsigned int n);
void sendbyte(unsigned int data);
void out595(void);
void spiintial(void);
void Display(unsigned int dat,unsigned char DotPosition,unsigned char ClearZeroFlag);
//---------------8位2進制段代碼對應(yīng)數(shù)碼管筆段 hcdb afge----------------//
const displaycode[] = {0x82,0xaf,0xc4,0x85,0xa9,0x91,0x90,0xa7,0x80,0x81,
0xa0,0x98,0xd2,0x8c,0xd0,0xf0,0xfd,0xff};//0-9,A-F,-,全滅
uchar PortCode[8] = {0,0,0,0,0,0,0,0};
void delay_1ms(void)
{
unsigned int b;
for (b=0;b<150;b++);
}
void delay_nms(unsigned int n)
{
unsigned int c=0;
for (c=0;c<n;c++)
delay_1ms();
}
/**************************************************595顯示程序*****************************************************/
/*SPI顯示子程序*/
void Display(unsigned int dat,unsigned char DotPosition,unsigned char ClearZeroFlag)
{
unsigned char i;
for(i = 0; i != 8; i++)
{
if(i == DotPosition)/// 小數(shù)點處理
{
PortCode[i] = (displaycode[(dat%10)]&0x7f);
}
else
PortCode[i] = displaycode[dat%10];
if(ClearZeroFlag&&(!dat)&&(i>DotPosition)) PortCode[i]=0xff;
dat /= 10;
}
sendbyte(PortCode[0]);
sendbyte(PortCode[1]);
sendbyte(PortCode[2]);
sendbyte(PortCode[3]);
sendbyte(PortCode[4]);
sendbyte(PortCode[5]);
sendbyte(PortCode[6]);
sendbyte(PortCode[7]);
out595();
}
void sendbyte(unsigned int data) //595 發(fā)送數(shù)據(jù)函數(shù)
{
LOAD_595 =1;
SSPBUF=data; /*啟動發(fā)送*/
while(SSPIF==0); /*等待發(fā)送完畢*/
SSPIF=0; /*清除SSPIF標(biāo)志*/
}
void out595(void) // 打開鎖存,顯示
{
LOAD_595=0;
asm("nop");
LOAD_595=1;
}
/*********************************ADC轉(zhuǎn)換***********************************************/
/*
void interrupt timer0_ADC_isr(void)
{
// unsigned int ADC_Value;
//unsigned char i;
if(T0IF==1)//TMR0定時1mS時間到
{
T0IF=0;//清TMR0溢出標(biāo)志位
TMR0=256-4;//重新裝入TMR0的定時1mS初值
//共陰數(shù)碼管動態(tài)顯示掃描程序段
PORTD=LEDDATA[LEDBuffer[ScanLEDCount]];
PORTE=ScanLEDCount;
ScanLEDCount++;
if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
}
if(ADIF==1)//AD轉(zhuǎn)換結(jié)束
{
ADIF=0;//清A/D轉(zhuǎn)換結(jié)束標(biāo)志
ADC_Value=(unsigned int)ADRESH*256+ADRESL;//讀取A/D轉(zhuǎn)換的結(jié)果
ADGO=1;//啟動A/D轉(zhuǎn)換開始
}
}
*/
/***********************************************************************************/
/***********************************************************************************/
void spiintial(void) //spi初始化
{
SSPCON=0x32; //主控方式,空閑時時鐘為高電平,時鐘為:Fosc/4
SSPSTAT=0xc0; //SCK上升沿數(shù)據(jù)傳送。
TRISC3=0; //SCK時鐘輸出引腳。
TRISC0=0; //輸出鎖存器控制脈沖(595-12)
TRISC5=0; //串行數(shù)據(jù)輸出引腳。
//INTCON= 0x80;// GIE=1,開總中斷,595顯示不用開中斷
}
void adcintial(void) //ad初始化
{
ADCS1=1;//設(shè)置ADC的時鐘為fosc/32
ADCS0=0;
CHS2=0;//選擇A/D轉(zhuǎn)換的通道0
CHS1=0;
CHS0=0;
//ADCON1: ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
ADFM=1;//轉(zhuǎn)換的數(shù)據(jù)格式為右對齊
PCFG3=0;//設(shè)置AN0-AN5為模擬輸入端,RE0(AN5)-RE2(AN7)為數(shù)字IO,VREF+=VDD,VREF-=VSS
PCFG2=0;
PCFG1=1;
PCFG0=0;
/*
TMR0=256-4;//定時1mS的初值裝入TMR0
T0CS=0;
PSA=0; ///分頻器
T0IF=0;//清TMR0溢出標(biāo)志
T0IE=1;//允許TMR0溢出中斷
*/
ADIF=0;//清A/D轉(zhuǎn)換結(jié)束標(biāo)志
ADIE=1;//允許A/D轉(zhuǎn)換中斷
PEIE=1;//啟動中斷的第二梯隊
//GIE=1;//CPU開中斷
// ADON=1;//啟動A/D工作
// ADGO=1;//A/D轉(zhuǎn)換開始
}
/*****************************************************************************************************
主函數(shù)
****************************************************************************************************/
void main()
{
spiintial(); //SPI初始化
adcintial(); //ad初始化
PEIE=1;//啟動中斷的第二梯隊
GIE=1;//CPU開中斷
ADON=1;//啟動A/D工作
ADGO=1;//A/D轉(zhuǎn)換開始
while(1)
{
if(ADIF==1)//AD轉(zhuǎn)換結(jié)束
{
ADIF=0;//清A/D轉(zhuǎn)換結(jié)束標(biāo)志
ADC_Value=(unsigned int)ADRESH*256+ADRESL;//讀取A/D轉(zhuǎn)換的結(jié)果
ADGO=1;//啟動A/D轉(zhuǎn)換開始
}
a++;
Display(a,3,0);
delay_nms(50);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -