|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2011-7-23 09:32:18
|
显示全部楼层
整理了程序,添加注释,更容易懂
/***********************************************************************************************
* Cool51
* Cool51开发板例程
*
* 文件名称:main.c
* 摘 要:触摸按键实验,实验前请将Cool51核心板的"P0.0EN"处短路帽去掉,Cool51核心板左上角既是
* 电容触摸,实验需使用STC12C5A60S2单片机
* 作 者:苑臣芒
*
* 当前版本:1.1
* 完成日期:2011/07/023
* 版权所有:Rays_ele - Copyright (C) 2011
*
*************************************************************************************************/
/********引用的头文件*******/
#include<reg52.h> //开发51单片机必须包含的头文件,该文件定义了89c52单片机内部寄存器的地址
/***********宏定义**********/
#define uchar unsigned char
#define uint unsigned int
/********硬件接口定义*******/
sbit TOUCH=P0^0; //P0.0为触摸按键
sbit LED=P3^3;
/******特殊寄存器声明*******/
sfr P0M1 = 0x93; //
sfr P0M0 = 0x94; // 两个寄存器控制P0口开漏状态,详见STC12C5A60S2手册
/*--------------------------------------------------------------------------------------
-函数名称:void Delay_ms(uint ms)
----------------------------------------------------------------------------------------
-函数功能:当晶振是11.0592Mhz时,函数延时大约是ms为单位的
-入口参数:uint ms 延时长度,比如需要延时100ms,则ms=100
-出口参数:无
---------------------------------------------------------------------------------------*/
void Delay_ms(uint ms)
{
uchar t;
while(ms--)
{
t=120;
while(t--);
}
}
/*--------------------------------------------------------------------------------------
-函数名称:bit Cool_Touch(void)
----------------------------------------------------------------------------------------
-函数功能:触摸按键,P0.0口,stc12c5A60S2,晶振是11.0592Mhz-12兆,使用定时器0资源
-入口参数:无
-出口参数:按键按下返回1,无按键返回0,此函数不阻塞
---------------------------------------------------------------------------------------*/
bit Cool_Touch(void)
{
uchar i=1;
P0M1=0X01; //配置P0为开漏输出
P0M0=0X01; //配置P0为开漏输出
TOUCH=0; //拉低TOUCH口
Delay_ms(50);//延时一定时间,等待其一定为低
TMOD = 0x02;//初始化定时器0为8位定时器,开始计数
TH0=0; //初始化TH0为0
TL0=0; //初始化TH0为0
TR0=1; //启动定时器
TOUCH=1; //释放TOUCH口,此时TOUCH会慢慢升高电平
while((!TOUCH)&&i++);//等待电平升高到单片机所认为的高电平,i控制溢出
TR0=0; //停止计数器
if(TL0>16||TL0<13) //检查定时器计数时间,是否引脚电平上升时间发生变化,也相当于引脚所处分布电容发生变化
return 1;
else
return 0;
}
/*--------------------------------------------------------------------------------------
-函数名称:void main(void)
----------------------------------------------------------------------------------------
-函数功能:主函数
-入口参数:无
-出口参数:无
---------------------------------------------------------------------------------------*/
void main(void)
{
while(1)
{
if(Cool_Touch()==1)
P2++;
}
} |
|