//****************************************************************************** //****************************************************************************** // CPU:78KO 78F0511 //****************************************************************************** // 头文件名定义 //****************************************************************************** #include // #include //****************************************************************************** // 选配字节的定义 //****************************************************************************** #pragma location = "OPTBYTE" __root const unsigned char option_bytes[]={0x00,0x00,0x00,0x00,0x00}; //选配字节设置80H-84H #define byte unsigned char #define word unsigned int #define SDA_on P1=P1|0X40; /* HC595*/ #define SDA_off P1=P1&0Xbf; /* HC595*/ #define SCK_on P6=P6|0x08 /* HC595*/ #define SCK_off P6=P6&0xf7 /* HC595*/ #define CS_on P6=P6|0x02 /* HC595*/ #define CS_off P6=P6&0xfd /* HC595*/ #define led_on P6=P6|0x01 #define led_off P6=P6|0xfe const unsigned char temp_table[10]={0x81,0xbd,0x13,0x19,0x2d,0x49,0x41,0x9d,0x01,0x09}; //****************************************************************************** // //****************************************************************************** byte data_temp; word temp,temp1,temp2; byte second; byte data1,data2,data3; byte qian,bai,shi,ge; word a1,a2,a3,a4,a5,a6,a7,a8; word ad_data; word ad_adcr; word x1; byte key1,key2,key3; word data[9]={0,0,0,0,0,0,0,0}; byte data_count; word ad_ad,ad_ad1; byte pcc_data; word delay_count; //****************************************************************************** // 中断函数 1ms中断 //****************************************************************************** #pragma vector=INTTM000_vect __interrupt void INTTM000( void ) { temp1++; temp2++; if(temp2>=delay_count) { P0=P0^2; temp2=0; } if(temp1==10) //A/D按键处理 { temp1=0; if(key1==0) { if((ad_data<350)&(ad_data>100)) //前消抖处理 { key1=1; key2=1; }else key1=0; } if(key2==1) { if((ad_data<350)&(ad_data>100)) //按键处理程序 { key3=1; key2=0; key1=1; P6=P6^1; temp++; }else { key1=0; key2=0; key3=0; } } if(key3==1) //后消抖处理 { if(ad_data>990) { key1=0; key2=0; key3=0; } } } } //****************************************************************************** // 中断函数 //****************************************************************************** #pragma vector=INTAD_vect __interrupt void INTAD( void ) { ad_data=ADCR; ad_data=ad_data>>6; data_count++; if(((ad_data-x1)<=1)&((ad_data-x1)>=1)) ad_data=x1; data[data_count]=ad_data; ad_ad=ad_ad+data[data_count]; if(data_count==8) { ad_ad1=ad_ad>>3; x1=ad_ad1; data_count=0; ad_ad=0; } ADCS=1; } //****************************************************************************** // 延时函数 //****************************************************************************** void delay(unsigned int i) { while(i>0) { i--; } } //****************************************************************************** // 显示驱动程序 //****************************************************************************** void hc595(void) { char temp,temp1; for(temp1=0;temp1<3;temp1++) { if(temp1==0) { data_temp=temp_table[data3]; } if(temp1==1) { data_temp=temp_table[data2]; } if(temp1==2) { data_temp=temp_table[data1]; } SDA_off; SCK_off; CS_off; for(temp=0;temp<8;temp++) { if(data_temp&0x01) { SDA_on; SCK_on; data_temp=data_temp>>1; SDA_off; SCK_off; }else { SDA_off; SCK_on; data_temp=data_temp>>1; SDA_off; SCK_off; } } } CS_on; } //****************************************************************************** // 主函数 //****************************************************************************** void main(void) { // PCC=0; PM6=0xf4; P6=0x00; PM1=0xbf; P1=0x00; PM0=0xFD; P0=0x00; P0_bit.no1=1; PRM00=0X00; CRC00=0X00; CR000=8000; //1ms TMC00=0X0C; TMMK000=0; /* TOC00=0X07; CR000=8000; CRC00=0; PRM00=2; TMC00=0X0C; */ //TCL50=0X04; //CR50=200; //0.1ms //TMC50=0X80; //TMMK50=0; ADCE=1; ADPC=1; ADS=0X03; delay(20); ADCS=1; ADMK=0; __enable_interrupt(); while(1) { qian=ad_ad1/1000; bai=(ad_ad1%1000)/0x64; ; shi=(ad_ad1%100)/0xa; ge=(ad_ad1%0x64)%0xa; data1=bai; data2=shi; data3=ge; delay(100); hc595(); } }