#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);
}
|