skynet 发表于 2017-2-23 21:49:48

求个PIC12F508的按键C程序,单击双击长按.这货太难搞了.

以前都是用状态机,然后开个定时器,扫描,中断计数,然后主循环判断.各种宏定义各种循环+++,各种标志位玩得不亦乐乎. 这几天刚刚开始玩508,发现这货真难弄啊. FLASH小,RAM小,这也就忍,还好,有1个定时器,暗喜,仔细一看,WHY??居然没有中断.谢特,单片机没中断........... 唉,傻了.要C的哈,不要ASM

zpywz 发表于 2017-2-23 22:39:21

本帖最后由 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;
}

su33691 发表于 2017-2-23 23:12:17

用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。

skynet 发表于 2017-2-23 23:22:29

su33691 发表于 2017-2-23 23:12
用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。

MCU能换早就换了,就是不能换.要换也是STM8S003.说多了都是泪,不扯这个

wwk1996 发表于 2017-2-24 07:27:50

手边还有一堆12F508吃灰的路过。帮顶。

skynet 发表于 2017-2-24 08:21:54

wwk1996 发表于 2017-2-24 07:27
手边还有一堆12F508吃灰的路过。帮顶。

有几K?多钱?什么货?

zc3909 发表于 2017-2-24 10:00:29

也不是难搞,实际上就是不熟,用的少

xad74 发表于 2017-2-24 10:32:48

估计多少价格惹的祸,可以考虑下国产的

yoursnemo 发表于 2017-2-24 11:46:39

本帖最后由 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;
                                }
                        }
                        /***********************/
                }
        }
}

wwk1996 发表于 2017-3-14 15:48:28

skynet 发表于 2017-2-24 08:21
有几K?多钱?什么货?

自己玩,不是做产品的,也没有几片{:sweat:}
页: [1]
查看完整版本: 求个PIC12F508的按键C程序,单击双击长按.这货太难搞了.