//根据硬件功能,分别显示两个不同的数据,分两次调用子程序,则显示出指定的数据。 //考虑 结合AD转换功能模块,显示转换AD之后的 数字量。综合2个功能模块编程
#include"pic.h" #include"pic1687x.h" unsigned char Table0[10]={0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0XF7,0XFF,0XEF}; //LED 共阴极数码管显示代码,带点。 单独RD7 显示部分。 unsigned char Table[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
const char table[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E}; // 共阳极代码 595处理显示部分。 const char table0[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
union adres //考虑 结合AD转换功能模块,显示转换AD之后的 数字量。综合2个功能模块编程 { int y1; unsigned char adres1[2]; }adres2;
void ADinitial() { TRISA2=1; //TRISA1=1; ADCON0=0B01010001; //0X51寄存器 0B01010001选择模拟通道为010 RA2; AD工作时钟频率8分频 01; ADGO/DONE * ADON; 需要AD转换ADON开启但是此刻不需要立刻转换工作 ANGO 0 ADCON1=0B10000000; //0X80 ADFM 转换结果排列方式 ADFM=1 则高6为是0000000?????????????? 转换结果放在地位。 //ADCON1 控制寄存器主要用于选择引脚的功能: 通用的数字信号入出的IO引脚; 模拟 量信号的输入功能;参考电压输入的功能RA5---RE0,RE1,RE2;
PIE1=0; PIE2=0; ADIE=1; PEIE=1; }
void interrupt ADdeal() //功能描述:中断模块必须有标志字, 如同 USART 通讯模块子函数。 { ADIF=0; adres2.adres1[0]=ADRESL; //AD模块转换结果,自动存储在 两个结果寄存器中, ADRESH; ADRESL. 必须用共用提变量将其取出再进行处理,产生对应动作。 adres2.adres1[1]=ADRESH; if(adres2.y1==0XCC) { //程序功能注释:输入部分为接地端部分; 小于3V的时候显示2, 可调电阻、电位器大于3伏特时候显示3。 0X266对应 3伏特电压,0X133对应1.5伏特 //程序改变模拟输入的量,0X133,小于1.5V的时候,显示1,大于1.5V时候显示2 PORTD=Table0[1]; // RC1=1; } //------------------------------------------------------------------------ else if(adres2.y1==0X199) { PORTD=Table0[2]; // RC1=0; } //---------------------------------------------------------------------------- else if(adres2.y1==0X266) //注意一个常识,严重区别好 等于符号 == 及赋值号。 { PORTD=Table0[3]; // RC1=1; } //------------------------------------------------------------------------- else if(adres2.y1==0X333) { PORTD=Table0[4]; // RC1=0; }
//------------------------------------------------------------------------ else if(adres2.y1==0X400) { PORTD=Table0[4]; // RC1=0; }
ADGO=1; //启动下一次AD采集信号。 } //----------------------------------------------------------------------------------------------------------------------------------------- void SYSinitial() { TRISD=0X00; PORTD=0XFF; TRISC1=0; //RC1 为蜂鸣器 1叫。 PORTC=0X00; }
//*************************************************************************************************************** SPIinitial() { PIR1=0;
SSPCON=0x30; SSPSTAT=0xc0;
TRISC5=0; TRISC3=0;
TRISC2=0;
}
//************************************************************************************************************* void SPILED(char data) { SSPBUF=data; do { ; }while(SSPIF==0) ; SSPIF=0; } //************************************************************************************************************** void display(char data1) { RC2=0;
SPILED(data1);
RC2=1; }
//-------------------------------------------------------------------------------------------------------------------------------- void main() { SYSinitial();
SPIinitial(); ADinitial();
GIE=1; PEIE=1; ADGO=1; //记得各类中断 功能模块都是有固定程序格式、分使能位?标志位
while(1) { ; }
} |
|