收藏 分销(赏)

51单片机电风扇程序设计.doc

上传人:a199****6536 文档编号:3068586 上传时间:2024-06-14 格式:DOC 页数:7 大小:22.50KB 下载积分:6 金币
下载 相关 举报
51单片机电风扇程序设计.doc_第1页
第1页 / 共7页
51单片机电风扇程序设计.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
#include<regX51.h> #define uchar unsigned char #define uint unsigned int #define out P2 uchar flag,count,n,m,x;//x是总开关标标志位,flag计数标志位,count变量:控制自动累加的时间长短,m档位标志位 uchar temp0,temp1,temp2,temp3;//手动按键设置四个数码管的数值变量 uchar tl_temp,th_temp,tl1_temp,th1_temp;//中间变量 uchar xz;// uint s;//数码管显示的值 ///////////////////////////////////////////////////////////////////////////////////////////// uint pwm1[3] = {56536,49536,36536}; uint pwm2[3] = {56536,56536,56536};//这两个数组是为了给定时器1一个初值 uchar zdm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管的字段码 void keyscan1();//声明键盘扫描函数 void dispaly();//声明函数:选择挡位1,2,3三个档位 void dispaly1();//声明:功能赋值函数 void delay();//声明延时 void delay() { uchar i,j; for(i=0;i<=10;i++) for(j=0;j<=120;j++); } //////////////////////////////延时程序 void keyscan1() { if(P3_0==0) { delay(); if(P3_0==0) { while(P3_0==0); flag++; if(flag==2) flag=0; } } ///////////////////////////////当p3_0按下falg加1,flag=2时清0;功能:下面说明 if(P1_4==0) { delay(); if(P1_4==0) { while(P1_4==0); temp0++; if(temp0==10) temp0=0; } } if(P1_3==0) { delay(); if(P1_3==0) { while(P1_3==0); temp1++; if(temp1==10) temp1=0; } } if(P1_2==0) { delay(); if(P1_2==0) { while(P1_2==0); temp2++; if(temp2==10) temp2=0; } } if(P1_1==0) { delay(); if(P1_1==0) { while(P1_1==0); temp3++; if(temp3==10) temp3=0; } } ///////////////////////////////按键调整四个数码管的调的数值 if(P3_1==0) { delay(); if(P3_1==0) m=1; } if(P3_2==0) { delay(); if(P3_2==0) m=2; } if(P3_3==0) { delay(); if(P3_3==0) m=3; } /////////////////////////////////////按键控制三个档位 if(P1_5==0) { delay(); if(P1_5==0) { while(P1_5==0); x++; if(x==2) x=0; } } } ///////////////////////////////总开关 void timer() interrupt 1 { TH0=0X3C; TL0=0XB0; count++; if(count==20) { count=0; s++; temp3=s/1000; temp2=s%1000/100; temp1=s%100/10; temp0=s%10; } } ///////////////////////////////////用定时器控制累加的时间间隔,s自加然后得出个十百千位的数值 void dispaly() { P0=zdm[s%10]; P3=0x7f; delay(); P3=0xff; P0=zdm[s%100/10]; P3=0xbf; delay(); P3=0xff; P0=zdm[s%1000/100]; P3=0xdf; delay(); P3=0xff; P0=zdm[s/1000]; P3=0xef; delay(); P3=0xff; } //////////////////////////////数码管显示 void display1() { if(m==1) { tl_temp=pwm1[0]%256; th_temp=pwm1[0]/256; tl1_temp=pwm2[0]%256; th1_temp=pwm2[0]/256; } else if(m==2) { tl_temp=pwm1[1]%256; th_temp=pwm1[1]/256; tl1_temp=pwm2[1]%256; th1_temp=pwm2[1]/256; } else if(m==3) { tl_temp=pwm1[2]%256; th_temp=pwm1[2]/256; tl1_temp=pwm2[2]%256; th1_temp=pwm2[2]/256; } } /////////////////////////////////占空比的时间初值,我的意思是把初值付给定时器的高八位低八位 void time2() interrupt 3 { if(xz==0) { TL1=tl_temp; TH1=th_temp; n=0; } ////////////////////////////////xz=0时把值付给定时器作初值计满电机开转 else { TL1=tl1_temp; TH1=th1_temp; n=1; } ////////////////////////////////xz=1时把另外的一个值付给定时器作初值,定时器计满电机停止 xz=~xz;//起循环控制作用 } /////////////////////////////////改变他们的初值就改变了速度 void main() { TMOD=0x11; TH0=0X3C; TL0=0XB0; EA=1; ET1=1; TR0=1; TR1=1; ///////////////////////////启用两个定时器 while(1) { keyscan1(); display1(); P1_0=n; if(x==1) { P3=0X00; P0=0X00; if(s==10000) { ET1=0; P1_0=1; s=0; P3=0X0F; P0=0XFF; } else { if(flag==1) ET0=0; else ET0=1; s=temp3*1000+temp2*100+temp1*10+temp0; dispaly(); } } else { s=0; P1_0=1; P3=0X0F; P0=0XFF; } } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服