仪器社区
登录
首页
找仪器
社区
百科
新品
供应商
品牌
应用
资料
仪企号
展会
标准
求购
招中标
光电传感器测速编程怎么写?这个程序输出乱码是怎么回事呢
hhsgsls3688
2016-08-07
#include
//包含单片机寄存器的头文件 #define uchar unsigned char //定义uchar为无符号字符型变量 #define uint unsigned int //定义uint为无符号整型变量 uchar wei_code[]={0xfe,0xfd,0xfb,0xf7}; //位码数据组 uchar duan_code[]={0xC...
#include
//包含单片机寄存器的头文件
#define uchar unsigned char //定义uchar为无符号字符型变量
#define uint unsigned int //定义uint为无符号整型变量
uchar wei_code[]={0xfe,0xfd,0xfb,0xf7}; //位码数据组 uchar duan_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码数据组0---9 uint zhuansu,a=0; //定义变量名称 bit flag; //计时标志位 /************************************** 延时,大约1ms ***************************************/ void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } /************************************** 定时器计数器初始化 ***************************************/ void init() { TMOD=0x51; //定时器T1工作于计数模式1,定时器T0工作于计时模式1 TH0=(65536-50000)/256; //定时器T0的高8位设置初值,每50ms产生一次中断 TL0=(65536-50000)%256; //定时器T0的低8位设置初值,每50ms产生一次中断 TH1=0; //定时器T1高8位赋初值0 TL1=0; //定时器T1低8位赋初值0 EA=1; //开总中断 ET0=1; //定时器T0中断允许 TR1=1; //定时器T1启动 TR0=1; //定时器T0启动 } /************************************** 数码管显示当前速度 ***************************************/ void display(uint speed) { P0=duan_code[speed/1000]; //显示千位数值 P1=wei_code[0]; //点亮diyi位数码管 delay(3); //延时,给数码管一定的显示时间 P0=duan_code[speed%1000/100]; //显示百位数值 P1=wei_code[1]; //点亮第二位数码管 delay(3); //延时,给数码管一定的显示时间 P0=duan_code[speed%1000%100/10]; //显示十位数值 P1=wei_code[2]; //点亮第三位数码管 delay(3); //延时,给数码管一定的显示时间 P0=duan_code[speed%10]; //显示个位数值 P1=wei_code[3]; //点亮第四位数码管 delay(3); //延时,给数码管一定的显示时间 } /************************************** 测速函数,每分钟转速 ***************************************/ uint timer1() { if(flag==1) //如果计时到1S { flag=0; //标志位置0 zhuansu=(TH1*256+TL1)*60/3; //每分钟转速等于T1一秒计数脉冲值乘60秒除以码盘数 TL1=0; //定时器重新赋初值,从0开始计数 TH1=0; } return zhuansu; //返回转速值 } /************************************** 主函数 ***************************************/ void main() { P1=0xff; //关数码管显示 init(); //定时计数器初始化 while(1) //无限循环 { display(timer1()); //显示转速 } } /************************************** T0定时中断服务程序 ***************************************/ void timer0() interrupt 1 using 1 { a++; //每中断一次a加1 if(a==20) //20次中断等于1S { flag=1; //标志位置1 a=0; //a置0,为下一秒开始计数赋值 } TH0=(65536-50000)/256; TL0=(65536-50000)%256; //重装初值 }
评论
全部评论
敛姿医县撑稻
溢出了,time是什么类型?如果是整形变量的话,肯定time=0,因(th1+th2)不超过511除1000000结果是0,0不能当除数正确的是(th1*256+th2),即使如此,time也不超过65535所以不能除1000000如果算速度的话,可以v=2000000/time; V要是长整型(longint)当然,time和v可以取FLOAT型,但送数码管显示不方便还有计数器用之前要清0,不知你主程序里清了吗.
6
0
2016-08-08
0条评论
回复
您可能感兴趣的社区主题
使用Elveflow压力
传感器
MPS控制微流体系统内的压力
1009
微流控芯片
智能
传感器
与
传感器
技术的发展
795
行业专用传感器
比亚迪f0空调温度
传感器
怎么
拔下来
531
温度传感器
微流体实验系统中液体流量测量用高精密流量
传感器
MFS和BFS
888
微流控芯片
如何使用BFS
传感器
高精度控制微流体系统中的流体流速?
737
微流控芯片
五要素
传感器
-五要素
传感器
介绍
433
uk500超声波
传感器
怎么
用。我想让它一定范围内的液体,
输出
一个信号。
429
超声波传感器
09款科鲁兹空气流量
传感器
怎么
拆开
943
流量传感器
11年科鲁兹1.8进气流量
传感器
怎么
查
335
流量传感器
神鹰纳米生物
传感器
怎么
调试?刚买回来一个DC12V. 18000VA的神鹰传
600
生物传感器
加载中...
已显示全部信息
评论
选购仪器 上yiqi.com
仪器网络推广
品牌网上传播
长按识别二维码查看信息详情