📄 button.c
字号:
//#include <pic.h>
#include <pic12f6x.h>
#define ADIN GPIO0
#define out1 GPIO1
#define out2 GPIO2
unsigned int zhkb=0;
unsigned int zhkb1=0;
unsigned int zhkb2=0;
unsigned char ch_jump=0;
unsigned char m=0;
unsigned int ADbuf;
//__CONFIG ( INTIO & UNPROTECT & PWRTDIS & BORDIS & WDTDIS & MCLRDIS );
void initial()
{
GPIO = 0x00;
TRIS0 = 1;
TRIS4 = 1;
TRIS1 = 0;
TRIS2 = 0;
ANS1 = 0;
ADCON0 = 0x00;
//TRISIO = 0b00000001; //设置GP0为输入;GP1,GP5为输出管脚;
ANSEL = 0b00001001; //设置模拟选择转换寄存器,由内部振荡器产生AD转换时钟选择,
//GP0设置为模拟量输入;
ADCON0 = 0b10000001; //设置AD控制寄存器,AD采样值为右对齐,模拟通道选择AN0,
//AD转换未进行,AD转换器打开;
OPTION = 0b11000010; //OPTION寄存器,设置GPIO禁止上拉,选择内部时钟,分频器分给TIMER0,
//
CM2 = 1;
CM1 = 1;
CM0 = 1;
T0IE = 1;
// VCFG = 0;
out1 = 0;
out2 = 0;
}
void delay(unsigned int i) //延时程序;
{
while(--i);
}
void output()
{
delay((129-zhkb));
out1 = 1;
out2 = !out1;
delay((zhkb));
out1 = 0;
out2 = 0;
delay((129-zhkb));
out1 = 0;
out2 = !out1;
delay((zhkb));
out1 = 0;
out2 = 0;
}
union adres
{
int y1;
unsigned char adre[2];
}adresult; //设置一个共用体,用来存放10位AD转换的值;
void adpick(void)
{
if(ADIF = 1)
{ //clear interrupt flag
ADIF = 0;
ADbuf = 0;
if(!ch_jump)
{adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH; //AD
ADbuf = adresult.y1;
zhkb1 = ADbuf/8-25;
CHS0=1;CHS1=1;ch_jump=1;}
else
{adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH; //AD
ADbuf = adresult.y1;
zhkb2 = ADbuf/8;
CHS0=0;CHS1=0;ch_jump=0;}
m++;
if(m==2)
{/*if(zhkb2<40)*/
zhkb=zhkb1;
/* else
{if(zhkb1<((zhkb2-25)*8+5))
zhkb=5;
else
zhkb=zhkb1-(zhkb2-25)*8;
/*if(zhkb<5)
zhkb=5;*/
/*}*/
m=0;
}
GODONE=1; //next enable ad input
// output();
}
}
main()
{
initial();
ADIF = 0;
GODONE=1;
adpick();
adpick();
adpick();
do
{
// GPIO1 = 1;
adpick();
output();
/*
delay((129-zhkb));
out1 = 1;
out2 = !out1;
delay((zhkb));
out1 = 0;
out2 = 0;
delay((129-zhkb));
out1 = 0;
out2 = !out1;
delay((zhkb));
out1 = 0;
out2 = 0;
*/
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -