搜索
bottom↓
回复: 9

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

[复制链接]

出0入12汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出75入90汤圆

发表于 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;
}

出0入0汤圆

发表于 2017-2-23 23:12:17 | 显示全部楼层
用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。

出0入12汤圆

 楼主| 发表于 2017-2-23 23:22:29 | 显示全部楼层
su33691 发表于 2017-2-23 23:12
用pic12、16的单片机,c编译器用ccs。内建许多函数,超方便。

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

出0入0汤圆

发表于 2017-2-24 07:27:50 来自手机 | 显示全部楼层
手边还有一堆12F508吃灰的路过。帮顶。

出0入12汤圆

 楼主| 发表于 2017-2-24 08:21:54 | 显示全部楼层
wwk1996 发表于 2017-2-24 07:27
手边还有一堆12F508吃灰的路过。帮顶。

有几K?多钱?什么货?

出0入0汤圆

发表于 2017-2-24 10:00:29 来自手机 | 显示全部楼层
也不是难搞,实际上就是不熟,用的少

出0入0汤圆

发表于 2017-2-24 10:32:48 | 显示全部楼层
估计多少价格惹的祸,可以考虑下国产的

出0入0汤圆

发表于 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年了~

  1. #include<pic.h>

  2.         __CONFIG(0x0FE6);

  3. #define _XTAL_FREQ                 4000000

  4. /******GPIO         Define*******/
  5. #define COM_LED                        GP0
  6. #define PORT_KEY                GP3
  7. /*************************/
  8. #define T0_OVERFLOW                5

  9. bit Flag_Timer0Overflow=0,Flag_KeyPress=0;
  10. unsigned char uc8_KeyScanCount=0,uc8_KeyPressCout=0;
  11. //======================MainRoutine======================
  12. void main(void)
  13. {
  14.         /******Device Initialize*******/
  15.         GPIO = 0b00000000;
  16.         TRIS = 0b00001000;
  17.         GPIO = 0b00000000;
  18.         OPTION = 0b00000001;                                //TIMR0 PSA=1:4
  19.         asm("NOP");
  20.         /**********Main Loop***********/
  21.         while(1)
  22.         {
  23.                 CLRWDT();
  24.                 if(TMR0<=T0_OVERFLOW)
  25.                 {
  26.                         TMR0 = T0_OVERFLOW;
  27.                         Flag_Timer0Overflow = 1;                        //1ms Timer0 Overflow
  28.                 }
  29.                 if(Flag_Timer0Overflow==1)
  30.                 {
  31.                         Flag_Timer0Overflow = 0;
  32.                         /***********************/
  33.                         uc8_KeyScanCount++;
  34.                         if(uc8_KeyScanCount>=10)
  35.                         {
  36.                                 uc8_KeyScanCount = 0;
  37.                                 if(PORT_KEY==0)
  38.                                 {
  39.                                         if(Flag_KeyPress==0)
  40.                                         {
  41.                                                 if(uc8_KeyPressCout>=5)
  42.                                                 {
  43.                                                         Flag_KeyPress = 1;
  44.                                                         COM_LED = ~COM_LED;
  45.                                                 }
  46.                                                 else uc8_KeyPressCout++;
  47.                                         }
  48.                                 }
  49.                                 else
  50.                                 {
  51.                                         Flag_KeyPress = 0;
  52.                                         uc8_KeyPressCout = 0;
  53.                                 }
  54.                         }
  55.                         /***********************/
  56.                 }
  57.         }
  58. }
复制代码

出0入0汤圆

发表于 2017-3-14 15:48:28 | 显示全部楼层
skynet 发表于 2017-2-24 08:21
有几K?多钱?什么货?

自己玩,不是做产品的,也没有几片
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 12:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表