手电大家谈-手电筒爱好者之家

 找回密码
 注册成为会员,享受更多功能。

QQ登录

只需一步,快速开始

只需一步,快速开始

搜索
查看: 7383|回复: 8

共享一个PIC12F629调光程序

[复制链接]

该用户从未签到

发表于 2008-11-19 11:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册成为会员,享受更多功能。

x
使用MPLIB自带的Hi-tech lite版c编译器编译。
不知道为何,Timer0定时中断总有问题,无法用作延时,只好采用实时延时方式,反正MCU也没别的事情好干。延时不是太精确,没仔细去调整。

欢迎老手拍砖!!!



/*
* 手电调光程序 for PIC12F629
* 6,7脚各控制一个7135, 4档调光顺序:单7135,双7135,单7135/10,单7135/2
* 在开启60ms到5秒之间关闭可以换档,5秒后锁定档位
*/
#include <htc.h>
#include <pic.h>
#define DEBUG
#define StepAddress 12
#define MaxStep 4
// 加溶丝配置
__CONFIG (INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BOREN);
void dispLED (unsigned char);
void soft1msPWM (unsigned int);
unsigned char Step;
main ()
{
unsigned char newStep;
unsigned int i;
OSCCAL = _READ_OSCCAL_DATA();
CMCON = 7;   // 关闭比较器
TRISIO = 0x3F; // 先设置所有引脚为输入
IOCB = 0;  // 禁止引脚电平变化引起中断
WPU = 0;  // 禁止弱上拉
Step = EEPROM_READ (StepAddress);
if (Step >= MaxStep)
  Step = 0;
dispLED (Step);
soft1msPWM (60);
if ((newStep = Step + 1) >= MaxStep)
  newStep = 0;
#ifdef DEBUG
TRIS5 = 0;
GPIO5 = 1;
#endif
EEPROM_WRITE (StepAddress, newStep);

soft1msPWM (3000);
#ifdef DEBUG
GPIO5 = 0;
TRIS5 = 1;
#endif
EEPROM_WRITE (StepAddress, Step);
for (;;)
  soft1msPWM (100);
}
void dispLED (unsigned char step)
{
switch (step) {
  case 0:
  {
   TRISIO = (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1);
   GPIO0 = 1;
   break;
  }
  case 1:
  {
   TRISIO = (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2);
   GPIO0 = 1;
   GPIO1 = 1;
   break;
  }
  case 2:
  case 3:
  {
   TRISIO = (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1);
   GPIO0 = 1;
   break;  
  }
  default:
   break;
}
}
void soft1msPWM (unsigned int loops)
{
unsigned char index;
unsigned char us100;
while (--loops) {
  for (index = 0; index < 10; index++) {
   if (Step == 2) {
    if (index == 0)
     GPIO0 = 1;
    else if (index == 2)
     GPIO0 = 0;
   } else if (Step == 3) {
    if (index == 0)
     GPIO0 = 1;
    else if (index == 5)
     GPIO0 = 0;
   } else {
    if (index == 0)
     GPIO0 = 1;
   }
   // 延时100us
   us100 = 100;
   while (--us100)
    ;
  }
}
}
回复 dsu_marcocopyright:copyright

使用道具 举报

  • TA的每日心情
    开心
    2017-6-24 04:56
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2008-11-19 11:59 | 显示全部楼层
    新手看不懂的路过
    回复

    使用道具 举报

    头像被屏蔽

    该用户从未签到

    发表于 2008-11-19 13:22 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-19 13:42 | 显示全部楼层
    看不懂,也頂  DIY(:44:)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-25 09:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-11-19 14:44 | 显示全部楼层
    基板上是C盲,如果是汇编也许还能弄清个大概(:sweat:)
    回复

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2008-11-19 15:41 | 显示全部楼层
    其实还是C比较方便,不必去记汇编指令,不同的MCU,稍微修改下就能移植了。
    像PIC独有的Bank操作,在C程序里都看不到了,编译器帮你做到了。换平台容易,就是C最大的好处。
    我只用过51, AVR, PIC,  才写了没几个程序。资料主要是看Datesheet,也买了几本书。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-19 15:52 | 显示全部楼层
    谢谢,暂且还看不懂,但看看源程序代码也很过瘾。(:lol:)
    俺一般是提出调光内容、模式要求,由技男东成出作品。(:titter:)

    [ 本帖最后由 lichy 于 2008-11-19 15:53 编辑 ]
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-11 14:35
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2009-2-1 21:58 | 显示全部楼层
    我用T13   PIC的飘过!!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2009-7-23 22:18 | 显示全部楼层
    想法不错,不知道是否实用。有没有那个品牌的筒子用呢?
    回复

    使用道具 举报

    本版积分规则

    小黑屋|手机版|Archiver|论坛自带搜索|下载论坛app|手电大家谈-手电筒爱好者之家 ( 备案序号:鲁ICP备05002565号 )
    以上言论纯属个人观点,与手电大家谈立场无关。
    最佳浏览模式:1920*1080


    GMT+8, 2024-9-29 21:21 , Processed in 0.188737 second(s), 41 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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