完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
相关推荐
1 条评论
14 个讨论
|
|
|
//#include "reg51.h"
#include #include typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void keydown(); void Timer0Init(); void keyUp(); void delay10us(u16 i); void PWM_Out(u16 X,u16 Y); void delay1ms(u16 i); ***it led=P3^3; //将单片机的P3.3端口定义为led ***it k1=P3^2; //定义P31口是k1 ***it PWM=P5^4; u16 X ;u16 Y; static u16 times = 1 ; u8 k2; //这被K2时在单片机做在线仿真时使用 u8 DtoX=0,XtoD=1; u8 a,b,c; //X为关闭时间,Y为开启时间,X+Y合计始终为1000毫秒 // //************************************************************************************************** //void PortSET(void) //{ // P5M1 = 0x00; // 0000 0000 // P5M0 = 0x10; // 0001 0000 //P5.4强推挽输出,其他准双向IO口 // //P3.2和p3.4强推挽输出 //} //可通过设置PXM1:PXM0的值: // PXM1:PXM0 // 0 0 准双向口(传统IO) // 0 1 推挽输出(强上拉 ,电流可达20mA,尽量少用) // 1 0 仅为输入(高阻) // 1 1 开漏,如传统8051的P0口 //例:C语言中直接赋值 // P1M0 = 0xC0; 1100 0000 // P1M1 = 0xA0; 1010 0000 //P1.7开漏,P1.6高阻,P1.5强推挽输出,其他准双向IO口 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { k2=0; //PortSET(); //端口数设置函数 X=250; Y=250; Timer0Init(); while(1) { keydown(); //判断按键是否按下 keyUp(); //判断按键是否抬起 PWM_Out(X,Y); //PWM波形输出函数 } } //=============================================================================== //=============================================================================== //=============================按键函数======================================== void keydown() { if(k1==0) //检测按键K1是否按下 { delay1ms(1); //消除抖动 一般大约10ms if(k1==0) //再次判断按键是否按下 { TR0=1;//打开定时器 if (times>=100) { //如果定时器计数变量【times】达到 100了,说明按键被按下有100毫秒了, //就执行一次【X=X-1, Y=Y+1】等指令,并把times置0,方便重新计数 times=0; TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; if (XtoD==1) { //当X小于20是,每一步减少1,达到精细调节 if (X<20) { X=X-1; Y=Y+1; } else { X=X-5; Y=Y+5;} if(Y==500) { XtoD=0; DtoX=1;} } //如果是从大到小,就执行下面的语句 if (DtoX==1) { X=X+5; Y=Y-5; if(X==500){ XtoD=1; DtoX=0;} } } } } } //====================================================================== //============================================================================= //=============================延时函数======================================== void delay10us(u16 i) //在单片机晶振为12M时 { while(i>0) //执行这条语句要用7微秒 { i--;} //执行这条指令要用4微秒 } //============================================================================== //============================================================================== void Timer0Init() { TMOD|=0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; ET0=1; //打开定时器0中断允许 EA=1; //打开总中断 times=0; // TR0=1; //打开定时器 } //中断处理程序 void Timer0() interrupt 1 { TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; times=times+1; } //============================================================================== //============================================================================== void delay1ms(u16 i) //误差 0us { while(i>0) { for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--) {} i--; } } //=============================================================================== //=============================================================================== //如果按键抬起来了,就关闭定时器,并给定时器赋初值,方便下次按键按下时号开始定时 void keyUp() { if(k1==1) { delay1ms(1); //消除抖动 一般大约10ms if(k1==1) { TR0=0;//关闭定时器 times=0; TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; } } } //=============================================================================== //=============================================================================== void PWM_Out(u16 X,u16 Y) { //X:为关灯时间,Y为开灯时间 【一开一关合计为500毫秒】,大约是200hz //在灯光很暗时,需要精细调节,假如 开灯时间Y为450,关灯时间X为50毫秒 //程序设计时,就应该:关灯--延时450---开灯---延时50---关灯,整个500周期中,亮灯时间只有50毫秒,关灯时间是450 //让PWM端口输出高电平,关闭灯 PWM=1 ; led=1; delay10us(Y); //让PWM端口输出高电平,点亮灯 PWM=0; led=0; delay10us(X); } |
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
661 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
652 浏览 0 评论
有人有STM8H1K08T连接TM1650的源码吗,可以直接使用的那种,我的代码在烧录之后数码管一直处于熄灭状态
946 浏览 0 评论
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
759 浏览 0 评论
846 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16954 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-8 19:01 , Processed in 0.814979 second(s), Total 67, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
20432