欢迎来到天天文库
浏览记录
ID:38364404
大小:41.50 KB
页数:3页
时间:2019-06-11
《单片机测电机转速(LED显示)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序/*---------------------------------------------------------------*文件名称:Jiuzhouxunse.c转速计的设计(LED显示)的主程序*原理:T1计数,T0计时,电动机每转动一周产生16个脉冲,T1采集一分钟内的脉冲数,后即可计算出转速*版本信息:2011-10-23---------------------------------------------------------------*/#include#defineuintunsignedint#defineucharu
2、nsignedcharbitflag;//计满1秒钟标志位ucharcount=100;//储存定时器T0中断次数uintsudu;//储存电机转速sbitLED1=P2^0;//千位sbitLED2=P2^1;//百位sbitLED3=P2^2;//十位sbitLED4=P2^3;//个位ucharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};/*------------------------------------------------------------功能:
3、主函数说明:使用晶振为12MHz的芯片,定时0.01秒。计时器初值为C=65536-0.01/10^(-6)=0D8F0H---------------------------------------------------------------*/voidmain(void){TMOD=0x51;//T1工作于计数模式1,T0工作于计时模式1;TH0=0xd8;//定时器T0赋初值TL0=0xf0;EA=1;//开总中断ET0=1;//定时器T0中断允许TR0=1;//启动定时器T0//count=0;//将T0中断次数初始化为0while(1){TR1=1;//计
4、数T1启动TH1=0;//计数T1高8位赋初值0TL1=0;//计数T1低8位赋初值0flag=0;//时间还未满1秒钟while(flag==0)//时间未满等待;sudu=(TH1*256+TL1)*60/16;//计算速度,每周产生16个脉冲//sudu=10000/(TH1*256+TL1);//计算速度}}/*-------------------------------------------------------------函数功能:定时器T0的中断服务函数-------------------------------------------------
5、-------------*/voidTime0(void)interrupt1using1//定时器T0的中断编号为1,使用第1组工作寄存器{count--;//T0每中断1次,count减1if(count%4==0)//显示千位{P0=0xff;//如采用proteus仿真,才加上这句P0=dispcode[sudu/1000];LED1=1;LED2=0;LED3=0;LED4=0;}if(count%4==1)//显示百位{P0=0xff;//如采用proteus仿真,才加上这句P0=dispcode[(sudu/100)%10];LED1=0;LED2=1;
6、LED3=0;LED4=0;}if(count%4==2)//显示十位{P0=0xff;//如采用proteus仿真,才加上这句P0=dispcode[(sudu/10)%10];LED1=0;LED2=0;LED3=1;LED4=0;}if(count%4==3)//显示个位{P0=0xff;//如采用proteus仿真,才加上这句P0=dispcode[sudu%10];LED1=0;LED2=0;LED3=0;LED4=1;}if(count==0)//若累计满100次,即计满1秒钟{flag=1;//计满1秒钟标志位置1count=100;//清0,重新统计中断
7、次数}TH0=0xf0;//定时器T0重新赋初值TL0=0xd8;}
此文档下载收益归作者所有