PIC10F202只单独设置GP3准双向口 弱上拉拉可以吗

查看: 1819|回复: 4
用PIC10F202单片机制作两路开关源程序
完整代码下载:
//=======================================用户配置区,供用户修改===========================================
#define TIME2&&1000& & & & & & //长按键时间设置,单位ms ,1000 = 1s&&范围:1~10s
//=========================================================================================================
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//************************************&&以下为代码区,请勿改动!&&*****************************************
//=============================================硬件连接示意===============================================
//
//& & ___短 _& && &长& &_______
//& && & |_| |_________|& & PIC10F200/202
//& && && && && && && && &&&+---------+
//& && && &KEY 长/短按键 ---|GP0& &GP3|---
//& && && && && && && && &&&|& && && &|
//& && && && && && && && &&&|GND& &VDD|
//& && && && && && && && &&&|& && && &|& && && && && && &&&__& && &___
//& && &&&长按键翻转输出 ---|GP1& &GP2|---短按键翻转输出 _|&&|____|& &|____
//& && && && && && && && &&&+---------+
//& && &__________& && && && & _____________
//& & _|& && && & |___________|& && && && & |____
//
//--------------------------------------------------------------------------------------------------------
/*
& && && && && &
& && && && && && && && && &&&长/短按键IO口电平翻转程序
&&说明:1.该程序通过检测GP0管脚的有效按键长短,循环翻转GP2和GP1管脚的输出电平高低。
& && && & 每检测到一个短按键,则对GP2管脚输出电平进行一次翻转,每检测到一个长按键,
& && && & 则对GP1管脚输出电平进行一次翻转。
& && &&&2.按键是带有状态机的键盘扫描程序,可有效对按键消抖,抗干扰能力极强。
& && &&&3.长按键的时间可通过程序顶端的参数进行方便的设置,以满足现场需求。
& &&&
& && &&&4.GP1、GP2在单片机默认状态和复位后输出电平为低。
& && &&&5.待机功耗为400uA(@5V),长按键功耗为500uA(@5V)。
& && &&&6.已启用内部弱上拉,按键可以不加上拉电阻,如果要保证信号可靠,可以加上拉电阻,
& && && & 建议选择&=100K的电阻,以降低长时间按下按键在电阻上的功耗。
& && & 日期:& && &&&版本:V2.0
&&
*/
//=========================================================================================================
#include &pic.h&& && &//本代码可支持单片机型号:PIC10F200/202
#define Key_Read_T 25 //等间隔读取键值,单位ms
#define KEY_IO& & & & & & & & GP0 & & & & //按键信号输入
#define Short_Out & & & & GP1& & & & & & & & //短按按键响应数出口
bit short_& & & & & & & & & & & & & & & & //记录Short_Out当前状态
bit short_IF;& & & & & & & & & & & & & & & & //短按响应标志
#define Long_Out & & & & GP2& & & & & & & & //长按按键响应数出口
bit long_& & & & & & & & & & & & & & & & //记录Long_Out当前状态
bit long_IF;& & & & & & & & & & & & & & & & //长按响应标志
unsigned char KEY_State=0;& & & & /*按键的状态变量*/
#define NOKEY& &&&0
#define PUSH_KEY&&1
#define LONG_PUSH 2
#define INITIAL_25MS 161& & & &&&//相对于本系统与定时器时钟,本数据为固定值。定时器增计数,计数周期为256us,计97个数约为25mS。256-97+2=161
/****************************************************************************
* 名& & 称:Key_ScanIO()
* 功& & 能:扫描键盘IO口并判断按键事件
* 入口参数:Ticklong:长按键有效时长,单位ms
* 出口参数:无
* 说& & 明: 该函数需要每隔25(Key_Read_T)ms,调用一次。最好放在定时中断内执行。
& && && && &如果中断间隔太长,可能丢键;间隔太短不能消除抖动。
****************************************************************************/
void Key_ScanIO(int Ticklong)
{
&&static unsigned int KeyTimerS;
&&
//===============================按键========================================& &
&&if(KEY_State==PUSH_KEY)&&KeyTimerS++;& & /*定时器,时间间隔25ms*/
&&else& && && && && && && &KeyTimerS=0;
&&
&&switch(KEY_State)& && && && && && &//根据按键的状态决定程序分支
&&{
& &&&case NOKEY: & & & & //------------------在未按键状态下--------------------------
& && & {& && && && && && && && && && &//若键被按下,按键状态变为&短按状态&。
& && && & if(KEY_IO==0) KEY_State=PUSH_KEY;
& && && &
& && & }
& &&&case PUSH_KEY:& & & & //-------------按键处于&短按状态&时------------------------
& && & {
& && && & if(KEY_IO!=0)& && && && &&&//若键被释放,认为是一次短按键
& && && && &{
& && && && &&&KEY_State=NOKEY;& && & //并回到&未按下状态&
& & & & & & & & & & & && &short_IF&&= 0;
& & & & & & & & & & & && &long_IF&&= 0;& && && && &&&
& && && && &}
& && && & else if(KeyTimerS&Ticklong) //若按键时间超过Ticks毫秒,认为是一次长按键,
& && && && &{
& && && && &&&KEY_State=LONG_PUSH;& && && &&&// 按键状态变为&长按状态&& && && &
& && && && &}& && &
& && && && && && &
& && & }
& &&&case LONG_PUSH: //------------按键处于&长按状态&时--------------------
& && & {
& && && & if(KEY_IO!=0)& && && && && & //若键被释放,回到未按键状态
& && && && &{
& && && && &&&KEY_State=NOKEY;
& & & & & & & & & & & && &short_IF&&= 0;
& & & & & & & & & & & && &long_IF&&= 0;
& && && && &}& &&&
& && && && && && && &
& && & }
&&}& &
/****************************************************************************
* 名& & 称:Key_Answer()
* 功& & 能:根据按键状态作出响应,控制IO管脚输出电平翻转
* 入口参数:Ticklong:长按键有效时长,单位ms
* 出口参数:无
****************************************************************************/
void Key_Answer(void)
{
&&if((KEY_State==PUSH_KEY)&&(short_IF == 0))&&
&&{
& & & & short_out = ~short_
& & Short_Out =&&short_
& & & & short_IF&&= 1;& & & &
&&}
&&if((KEY_State==LONG_PUSH)&&(long_IF == 0))
&&{
& & & & long_out = ~long_
& & & & Long_Out =&&long_
& & & & long_IF&&=& & & & 1;
&&}&&& & & & & & & &
/**************************************************************************************
名& & 称:main()
功& & 能:主程序
入口参数:无
出口参数:无
***************************************************************************************/
void main()
{
& & & &
& &&&//设置时钟周期Fosc = 4MHz,系统时钟,无法设置
& & & & OPTION = 0x97;&&& & & & & & & & //复位值0xFF。TIMER0的时钟源是Fosc/4,1us。TIMER0 256预分频,256us
//& & & & CMCON0 = 0xE1;
& & TRISGPIO = 0x09;& & & & & & & & //GP1、GP2配置为输出。0为输出,1为输入
& & & & short_out = 0;
& & Short_Out = short_
& & & & long_out = 0;& &
& & & & Long_Out = long_& & //为输出赋初值& & & &
& & & & TMR0 = INITIAL_25MS;& & & & & & & & //增计数,计数周期为256us,计97个数约为25mS。256-125+2=97
& & & & while(1)
& & & & {
& & & & & & & & #asm
& & & & & & & & CLRWDT& &&&
& & & & & & & & #endasm& & & &
& & & & & & & & if(TMR0 & INITIAL_25MS) //1ms 进入1次
& & & & & & & & {
& & & & & & & && &TMR0 = INITIAL_25MS;&&//增计数,计数周期为256us,计97个数约为25mS。256-125+2=97
& & & & & & & && &Key_ScanIO(TIME2/Key_Read_T);//判断按键值
& & & & & & & && &Key_Answer();& && && &//根据键值控制输出IO电平翻转
& & & & & & & & }
//====================================================代码结束!=================================================复制代码
初学者,学习一下
我司有PIC现货,另有可替换的单片机,不需要修改程序跟软件,如有需要请联系颜,
学习一下!!!
能配上电路,更为完善!!!
Powered byPIC10F200(Microchip)中文数据手册「EasyDatasheet」_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
PIC10F200(Microchip)中文数据手册「EasyDatasheet」
EasyDatasheet是全球数据规模最大的硬件网站...|
总评分0.0|
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
PIC10F200数据手册
下载积分:100
内容提示:PIC10F200数据手册
文档格式:PDF|
浏览次数:41|
上传日期: 13:14:21|
文档星级:
全文阅读已结束,如果下载本文需要使用
 100 积分
下载此文档
该用户还上传了这些文档
PIC10F200数据手册
关注微信公众号君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
PIC10F200_PIC10F202_PIC10F204_PIC10F206.pdf
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 弱上拉电阻 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信