光电传感器的测速 - 图文(6)

2019-08-03 10:10

附录2 源程序

#include #include

#define uchar unsigned char #define uint unsigned int

sbit lcden=P2^6;//定义1602使能端 sbit lcdrs=P2^4; sbit lcdrw=P2^5;

sbit a=P1^0;//对射传感器的信号输出端 sbit add=P3^4;//按键加一变量 sbit jian=P3^5;//按键减一变量 sbit bj=P2^3;//蜂鸣器端口 char zhuan[16];//设置临时数组 uint num2;//每秒的转速

uint number=7;//设定转速的初值,在其基础上按键加一或按键减一 uint num=0;//转数变量

void Init_Timer0(void);

void delay(uint z)//延迟函数 {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); }

void write_com(uchar com)//1602写命令 {

lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_date(uchar date)//1602写数据 {

lcdrs=1; lcden=1; P0=date; delay(5); lcden=0; }

26

void LCD_Write_String(uchar x,uchar y,uchar *s) //向1602写字符串 {

if (y == 0) {

write_com(0x80 + x); //表示第一行 } else

{

write_com(0xC0 + x); //表示第二行 } while (*s) {

write_date( *s); s++; } }

void LCD_Write_Char(uchar x,uchar y,uchar Data) //向1602写字符 {

if (y == 0) {

write_com(0x80 + x); } else {

write_com(0xC0 + x); }

write_date( Data); }

void init() //初始化

{ bj=0; //蜂鸣器初始化 write_com(0x01); //1602初始化 lcdrw=0; lcden=0;

write_com(0x38); write_com(0x0e); write_com(0x06);

LCD_Write_Char(13,0,'n'); LCD_Write_Char(14,0,'/'); LCD_Write_Char(15,0,'s'); LCD_Write_Char(13,1,'n'); LCD_Write_Char(14,1,'/');

27

LCD_Write_Char(15,1,'s'); }

void main() { init(); while(1) {

if(a==1)//对射传感器检测障碍物 {num++;//计转数 while(a);}

sprintf(zhuan,\ LCD_Write_String(0,0,zhuan); Init_Timer0();//定时1s

sprintf(zhuan,\输出一秒的转速 LCD_Write_String(0,0,zhuan);

if(num2>=number)//转速超过设定值报警 bj=1;

if(num2

{ //按下相应的按键,1602LCD液晶显示屏显示相应的码值 delay(5); if(!add) {

number=number+1;

sprintf(zhuan,\打印温度值 LCD_Write_String(0,1,zhuan);//显示第二行 while(!add); } }

if(!jian)

{ //按下相应的按键,1602LCD液晶显示屏显示相应的码值 delay(5); if(!jian) {

number--;

sprintf(zhuan,\打印温度值

28

LCD_Write_String(0,1,zhuan);//显示第二行 while(!jian); } } } }

void Init_Timer0(void) {

TMOD |= 0x01; //使用模式1,16位定时器,使用\符号可以在使用多个定时器时不受影响

//TH0=0x00; //给定初值 //TL0=0x00;

EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 }

/*------------------------------------------------ 定时器中断子程序

------------------------------------------------*/ void Timer0_isr(void) interrupt 1 {

static unsigned int num1;

TH0=(65536-2000)/256; //重新赋值 2ms TL0=(65536-2000)%6;

num1++;

if(num1==500) //计时1s {

num1=0; num2=num;

num=0; //读标志位置1 } }

29


光电传感器的测速 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013级水工专业《土力学》自学周历、测验 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: