探测铁块的模块程序

2020-01-30 13:31发布

#include<reg52.h>
#define uint unsigned int  //预定义一下
#define uchar unsigned char

   uchar  t=0; //金属块数目

sbit rs=P1^2;          //1602的数据/指令选择控制线
sbit rw=P1^1;          //1602的读写控制线
sbit en=P1^0;          //1602的使能控制线
//sbit num=P2^0;                   // 计数
sbit P07=P0^7;                                //测距

sbit Metal_DTC1=P3^2; //铁块引脚
sbit Metal_DTC2= P3^3; //铁块引脚


/*P0口接1602的D0~D7,注意不要接错了顺序*/
uchar code table[]="0123456789"; //要显示的内容1放入数组table
uchar code table1[];
void delay(uint n)       //延时函数                       
{
    uint x,y;  
    for(x=n;x>0;x--)
        for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)  //1602写命令函数                 
{        

    rs=0;            //选择指令寄存器
    rw=0;            //选择写
    P2=com;            //把命令字送入P2
    delay(5);            //延时一小会儿,让1602准备接收数据
    en=1;           //使能线电平变化,命令送入1602的8位数据口
    en=0;
}
void lcd_wdat(uchar dat)        //1602写数据函数      
{
    rs=1;        //选择数据寄存器
    rw=0;        //选择写
    P2=dat;        //把要显示的数据送入P2
    delay(5);        //延时一小会儿,让1602准备接收数据
    en=1;        //使能线电平变化,数据送入1602的8位数据口
    en=0;
}
void lcd_init()              //1602初始化函数      
{
    lcd_wcom(0x38);       //8位数据,双列,5*7字形      
    lcd_wcom(0x0c);      //开启显示屏,关光标,光标不闪烁
    lcd_wcom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位
    lcd_wcom(0x01);    //清屏
}
void main()            //主函数
{   

    uchar count=0;          
        lcd_init();       //液晶初始化        
            EA=1;                    //开关总中断开关
           EX0=1;                    //打开外部中断0开关
           IT0=1;                        //触发方式设
      lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位           
           delay(200);
       while(1); //动态停机
}
void tikuai() interrupt 0
{   
        if(Metal_DTC1==0&&Metal_DTC2==0) //检测到金属
          t=t+1;       
        else
          t=t;
     lcd_wcom(0x80);   //显示地址设为80H(即00H,)上排第一位
           lcd_wdat(table[t]);           
          delay(200);

}                          
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。