




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PWM_Period_Cont.C/*TITLE: 产生占空比可调的PWM波形 FUNCTION: 通过按键实现占空比的调整,并在数码管上显示WRITER: LINLIANHUOTIME: 2014-7-31ATTENTION:没有调试成功 */#include #include SMG.H#include PWM.H#include KEY.H#define uint unsigned int#define uchar unsigned charuchar period_cnt_num; /占空比值=num/100uchar key_value;void main() smg_init();key_init();PWM_init();EA=1;key_value=get_key_value();period_cnt_num=1;while(1) if(key_value!=KEY_NULL) if(key_value=KEY_UP) if(period_cnt_num1)period_cnt_num-;/else/period_cnt_num=99;PWM_set(period_cnt_num);smg_write(period_cnt_num%10+0,0x01,SMG_DIS_DIGIT);smg_write(period_cnt_num%10+0,0x02,SMG_DIS_DIGIT);KEY.H/* - THE KEY FUNCTION LIB - COPYRIGHT (C) 2014 BY LLH - ALL RIGHTS RESERVED -*/#ifndef _KEY_FUN_H_#define _KEY_FUN_H_#define uint unsigned int#define uchar unsigned charenum KEY_VALUEKEY_UP= 0x01,KEY_DOWN= 0x02,KEY_NULL = 0x00;/#define KEY_UP 0X01/#define KEY_DOWN 0X02/#define KEY_NULL 0X01#define READ_KEY(x,name,b) (x)?(b|=name):(b&=name) )#define CAN_MORE_PRESS 0 /* 是否允许多键都按: 允许为1;不允许为0 */#define CAN_REPEAT 1 /* 是否允许重复按键: 允许为1;不允许为0 */#define REPEAT_MODE 1 /* 重复模式: 先长后短为1;相同间隔为0 */#define FIRST_TIMES 200 /* 重复按下时,第一次间隔时间 */#define OTHER_TIMES 25 /* 第二次后间隔时间(如果重复模式为0时此值无效) */#define KEY_DELAY_TIME 20 /* 键盘扫描时间间隔XXXus */#define KEY_FORCE_VALUE 0#define IN_PRESS_UP P10 /*1设置键端口 */#define IN_PRESS_DOWN P11 /*2设置键端口 */ uchar keyValueBuff; /*读取键值的缓冲区*/ uchar keyValueOld; /*前一次的键值*/ uchar keyValueTemp; /*键值中间交换变量*/ uint stillTimes; /*键按下保持次数*/ uint stillTimesMax; uchar temp;/sbit k1=P10;/sbit k2=P11;/*按键的检测*uchar keyscan() if(k1=0)return KEY_UP;if(k2=0)return KEY_DOWN;if(k1!=0)&(k2!=0)return KEY_NULL;*/*按键初始化*/void key_init(void) keyValueBuff = 0x00; keyValueOld = 0x00; keyValueTemp = 0x00; stillTimes = 0; stillTimesMax = FIRST_TIMES;/*按键的检测*/void read_all_key(uchar *buff) if(IN_PRESS_UP=KEY_FORCE_VALUE) /检测按下的键 READ_KEY(1,KEY_UP,*buff); else READ_KEY(0,KEY_UP,*buff); if(IN_PRESS_DOWN=KEY_FORCE_VALUE) READ_KEY(1,KEY_DOWN,*buff); else READ_KEY(0,KEY_DOWN,*buff);/*读值*/uchar get_key_value(void) keyValueBuff = 0x00; read_all_key(&keyValueBuff); keyValueTemp = keyValueBuff; delayus(KEY_DELAY_TIME); read_all_key(&keyValueBuff); /* 两次读到的键盘值相同 则为有效键盘值 */ if( keyValueTemp = keyValueBuff ) temp=get_data_count(keyValueTemp); if(keyValueTemp = 0) keyValueOld = 0; stillTimes = 0; stillTimesMax = FIRST_TIMES; return 0; else if(keyValueOld != keyValueTemp) stillTimes = 0; keyValueOld = keyValueTemp; if(CAN_MORE_PRESS) return keyValueTemp; else if( 1 =temp ) return keyValueTemp; else return 0; else if(keyValueOld = keyValueTemp) if (CAN_MORE_PRESS = 0) if( 1 != temp ) stillTimes = 0; return 0; if (CAN_REPEAT) stillTimes +; if(stillTimes stillTimesMax) stillTimes = 0; if (REPEAT_MODE) if(FIRST_TIMES = stillTimesMax) stillTimesMax = OTHER_TIMES; return keyValueTemp; else stillTimes = 0; return 0; else stillTimes = 0; return 0; return 0;/*函数名称:get_data_1_count(uchar number)*函数功能:计算uchar类型变量中1的数量,用于检测是否多键按下*函数入口:number,需要检测1数量的变量*函数出口:返回变量bumber中1的数量*/uchar get_data_count(uchar number) uchar i,j = 0,a=0x01; for(i = 0; i 8; i +) if(number&a) j +; a=a=1)&(date=99) pwm_value=date;elsepwm_value=1; /不在099范围内,输出一个1:99的脉冲/*T1定时中断服务程序*/void T1_int() interrupt 3 using 0pwm_per_cnt+;if(pwm_per_cnt=PWM_Period)pwm_per_cnt=0; TH1=255-10;TL1=255-10;#endifSMG.H/* - THE SMG DISPLAY LIB - COPYRIGHT (C) 2014 BY LLH - ALL RIGHTS RESERVED -*/#ifndef _SMG_DIS_H_#define _SMG_DIS_H_#define uint unsigned int#define uchar unsigned charenum SEG_DISPLAY_MODSMG_DIS_DIGIT=0x00,SMG_DIS_CHAR=0x01;#define TURE 1#define FALSE 0/#define SMG_DIS_CHAR 0x01/#define SMG_DIS_DIGIT 0x00sbit SMG_CS1=P20;sbit SMG_CS2=P21;uchar code smg_table=0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b;/*us延时子程序*/void delayus(uint x) uchar i; while(-x) for(i=0;i10;i+); /*数码管数据写入子程序*/void smg_write(uchar content,uchar smg_x,uchar model) if(SMG_DIS_CHAR=model)/字符显示P0=content;elseif(SMG_DIS_DIGIT=model)/数字显示P0=smg_tablecontent-0;if(smg_x&0xff)=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国内旅游合同简易模板
- 2025私房买卖的合同范本
- 2025跨国合作合同条款
- 2025年度物业管理服务合同样本
- 地砖报价专业知识培训总结
- 大规模分布式网络建设与服务支持合同
- 特色民宿出租协议
- 三方商品采购协议
- 视频直播技术支持协议
- 2025年政府会计制度实施能力考试(事业单位)模拟题及答案
- 《西红柿移栽和管理》课件
- 《肺癌早期筛查与干预》课件
- 完整的离婚协议书打印电子版(2025年版)
- 自然科学类博物馆AI应用行业跨境出海战略研究报告
- 《小学科学课程标准》解读与教学设计
- 2025届高考新型题目“纠正错别字”新题模拟练习
- 2024年江苏省南京市中考数学试卷真题(含答案逐题解析)
- 儿童保健工作规范和技术规范
- 2025年区块链应用操作员职业技能竞赛理论参考试指导题库500题(含答案)
- 福建地区 绿色食品琯溪蜜柚生产操作规程
- 民办学校教职工学年度考核方案模版(3篇)
评论
0/150
提交评论