求个PIC12F508的按键C程序,单击双击长按.这货太难搞了.
以前都是用状态机,然后开个定时器,扫描,中断计数,然后主循环判断.各种宏定义各种循环+++,各种标志位玩得不亦乐乎. 这几天刚刚开始玩508,发现这货真难弄啊. FLASH小,RAM小,这也就忍,还好,有1个定时器,暗喜,仔细一看,WHY??居然没有中断.谢特,单片机没中断........... 唉,傻了.要C的哈,不要ASM本帖最后由 zpywz 于 2017-2-23 22:45 编辑
呵呵,哈哈。跟我一样一样的。
12F508 查询TMR值再进行轮询。
void main()
{
initialize();
while(1)
{
ConfigIO_Read();
FuncHandle();
while(1)
{
CLRWDT();
if(TMR0==125)
{
TMR0=0x00;
//T0IF= 0;
break;
}
}
}
}
//*********************************
//初始化设置 定义
//**********************************
void initialize(void)
{
OPTION=0b11000010 ;//0x8f;
TRIS=0b00110001;//0x00;
GPIO=0;
} 用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。 su33691 发表于 2017-2-23 23:12
用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。
MCU能换早就换了,就是不能换.要换也是STM8S003.说多了都是泪,不扯这个 手边还有一堆12F508吃灰的路过。帮顶。 wwk1996 发表于 2017-2-24 07:27
手边还有一堆12F508吃灰的路过。帮顶。
有几K?多钱?什么货? 也不是难搞,实际上就是不熟,用的少 估计多少价格惹的祸,可以考虑下国产的 本帖最后由 yoursnemo 于 2017-2-24 12:03 编辑
PIC的MCU刚开始用确实感觉有点不好用,不过用久了,我觉得这货确实太好用了。
PIC10F200、PIC10F202、PIC12F508、PIC12F509这4个料的资源极为相似,应该是同个电路封装成4个型号而已。
代码我用的是MDT10F509测试的,跟PIC12F508一样,就是多了一倍的ROM,测试通过:按一下按键GP3,GP0电平输出翻转。
后面的代码可以按这个程序套进去,是时间片轮的框架~
如果要用性价比的MCU,可以找我,我已经好久没用PIC的MCU了,近一年都是在用国产的8位机,用起来不错~
要PIC的也可以找我,因为本身我们就是MICROCHIP的合作伙伴,差不多10年了~
#include<pic.h>
__CONFIG(0x0FE6);
#define _XTAL_FREQ 4000000
/******GPIO Define*******/
#define COM_LED GP0
#define PORT_KEY GP3
/*************************/
#define T0_OVERFLOW 5
bit Flag_Timer0Overflow=0,Flag_KeyPress=0;
unsigned char uc8_KeyScanCount=0,uc8_KeyPressCout=0;
//======================MainRoutine======================
void main(void)
{
/******Device Initialize*******/
GPIO = 0b00000000;
TRIS = 0b00001000;
GPIO = 0b00000000;
OPTION = 0b00000001; //TIMR0 PSA=1:4
asm("NOP");
/**********Main Loop***********/
while(1)
{
CLRWDT();
if(TMR0<=T0_OVERFLOW)
{
TMR0 = T0_OVERFLOW;
Flag_Timer0Overflow = 1; //1ms Timer0 Overflow
}
if(Flag_Timer0Overflow==1)
{
Flag_Timer0Overflow = 0;
/***********************/
uc8_KeyScanCount++;
if(uc8_KeyScanCount>=10)
{
uc8_KeyScanCount = 0;
if(PORT_KEY==0)
{
if(Flag_KeyPress==0)
{
if(uc8_KeyPressCout>=5)
{
Flag_KeyPress = 1;
COM_LED = ~COM_LED;
}
else uc8_KeyPressCout++;
}
}
else
{
Flag_KeyPress = 0;
uc8_KeyPressCout = 0;
}
}
/***********************/
}
}
} skynet 发表于 2017-2-24 08:21
有几K?多钱?什么货?
自己玩,不是做产品的,也没有几片{:sweat:}
页:
[1]