#include <htc.h>
#include <math.h>
#define HC595_SER RB7
#define HC595_SCK RB6
#define HC595_RCK RB5
#define key_164_data RB3
#define key_164_clk RB2
#define key_com1 RB1
#define key_com0 RB0
#define TURE 1
bit key_finish; //定义位变量,这是PICmate仿真软件环境的特有的地方 unsigned int sample_key;
unsigned int sample_keyBuf[2];
unsigned int key_value;
unsigned char key_row_sel;
unsigned char key_number;//键号
unsigned int T100ms;
unsigned char disbuf[8];
unsigned int ad_data;
int a[4];
const unsigned char seven_seg[16]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//----------------------------------------------
void disbuf_update(void)
{
disbuf[7]=seven_seg[a[3]];
disbuf[6]=seven_seg[a[2]];
disbuf[5]=seven_seg[a[1]];
disbuf[4]=seven_seg[a[0]];
disbuf[3]=seven_seg[0];
disbuf[2]=seven_seg[0];
disbuf[1]=seven_seg[0];
disbuf[0]=seven_seg[0];
}
//----------------------------------------------
//发送一个字节
void s_pData(unsigned char key) //形参key对应着实参disbuf
{
unsigned char i;
for(i=0;i<8;i++)
{
if(0x80&(key<<i)) //此处是一个非常微妙的地方。当括号里的值为0时转到else语句执行,当为1时按照顺序执行语句,但是要跳过else语句。
HC595_SER=1;
else HC595_SER=0;
HC595_SCK=0;
HC595_SCK=1;
}
}
//----------------------------------------------
//----------------------------------------------
void display (void)
{
unsigned char i;
for(i=0;i<8;i++)
s_pData(disbuf);
HC595_RCK=0;
HC595_RCK=1;
}
//----------------------------------------------
void start_ad_change (void) //开始A/D转化
{
ADCON1=0x80;
ADCON0=0x48;
ADON=1;
ADIF=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
ADGO=1;
while(ADIF==0);
ADIF=0;
ad_data =ADRESL;
ad_data |=(unsigned int)(ADRESH<<8); //强制ADRESH的8位放在ad_data的高八位
ADON=0;
}
void two_change_ten(void) //二进制转十进制
{
int s=0,i;
for(i=0;i<=15;i++)
{if(0x0001&(ad_data>>i))
s=s+pow(2,i);
}
a[0]=s%10;
a[1]=(s/10)%10;
a[2]=(s/100)%10;
a[3]=s/1000;
}
//主程序
int main(void)
{
PORTB=0;
TRISB=0x03;
PORTA=0;
TRISA=0x02;
while(1)
{
start_ad_change();
two_change_ten();
disbuf_update();
display();
}
}
//----------------------------------------------