单片机与PS2鼠标程序滚轮识别显示3D坐标(3)

2020-03-29 19:15

} }

#endif

/********************XXX.H文件部分**********************/ #ifndef LCD1602_4_H #define LCD1602_4_H #include #include\

#define LCD1602_DATA P0

#define CLEARSCREEN LCD1602_write_cmd(0x01)

sbit LCD1602_RS=P2^5; sbit LCD1602_RW=P2^6; sbit LCD1602_EN=P2^7;

//********************************************************************** void LCD1602_Init(void); //液晶初始化 void LCD1602_write_cmd(uchar command); //写命令 void LCD1602_write_data(uchar temp); //写数据 void LCD1602_set_xy(uchar x, uchar y); //设置坐标 void LCD1602_write_char(uchar x,uchar y,uchar dat); //写一个字符到第x行y列 void LCD1602_write_string(uchar x,uchar y,uchar *s);//写字符串到第x行y列 void LCD1602_Read_BF(void); //读忙信号 void num(uchar x,uchar y,uint n); //在第x行,第y列显示整型数字n //**********************************************************************

void LCD1602_Init(void) { LCD1602_write_cmd(0x28); LCD1602_write_cmd(0x28); LCD1602_write_cmd(0x28);//设置4位数据传输模式 LCD1602_write_cmd(0x0C); LCD1602_write_cmd(0x80); CLEARSCREEN; }

void LCD1602_Read_BF(void) { LCD1602_RW=1; //RW 1 LCD1602_RS=0; //RS 0

LCD1602_EN=1; //EN 1 Read BF

LCD1602_DATA=LCD1602_DATA&0x0F|0xf0; while(LCD1602_DATA&0x80); LCD1602_EN=0; }

void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD {

LCD1602_EN=1; _nop_();

LCD1602_EN=0; }

//************************************* void LCD1602_write_cmd(uchar command) { LCD1602_Read_BF(); LCD1602_RS=0; //RS 0 LCD1602_RW=0; //RW 0 LCD1602_DATA&=0x0F; LCD1602_DATA=command&0xf0 | LCD1602_DATA&0x0f; LCD_en_write(); command=command<<4; LCD1602_DATA&=0x0F; LCD1602_DATA=command&0xf0 | LCD1602_DATA&0x0f; LCD_en_write(); }

//********************************* void LCD1602_write_data(uchar dat) { LCD1602_Read_BF(); LCD1602_RS=1; //RS 1 LCD1602_RW=0; //RW 0 LCD1602_DATA &=0x0F; LCD1602_DATA=dat&0xf0 | LCD1602_DATA&0x0f; LCD_en_write(); dat=dat<<4; LCD1602_DATA &=0x0F; LCD1602_DATA=dat&0xf0 | LCD1602_DATA&0x0f; LCD_en_write(); }

//********************************************** void LCD1602_set_xy(uchar x,uchar y) {

uchar address; y&=0x0f; if(!x) address=0x80+y; else address=0xc0+y; LCD1602_write_cmd(address); }

//**************************************************************** void LCD1602_write_char(uchar x,uchar y,uchar dat) { LCD1602_set_xy(x,y); LCD1602_write_data(dat); }

//********************************************************************* void LCD1602_write_string(uchar x,uchar y,uchar *s) { LCD1602_set_xy(x,y); while(*s) { LCD1602_write_data(*s); s++; } }

void num(uchar x,uchar y,uint n) { uchar i,length,a[6]={0,0,0,0,0,0}; uint nx=n; if(n==0){LCD1602_write_char(x,y,'0');return;} for(i=0;i<6;i++) { if(nx>=1)length++; nx/=10; } nx=n; for(;length>0;length--) { a[length-1]=nx+48; nx/=10; } LCD1602_write_string(x,y,a); }

#endif

/********************XXX.H文件部分**********************/ #ifndef DELAY52_H #define DELAY52_H

#define uchar unsigned char #define uint unsigned int #include

//起始值delayus(1)=27us,间隔9.9us void delay10us(uint t) { while(t--); }

void delayms(uint t) { uint i; uchar j; for(i=0;i

#endif

整个程序完!

先按上面接口连接,然后即可编译下载,测试~~~~然后在修改成自己的代码。

6.3.3 定时计数器的控制寄存器


单片机与PS2鼠标程序滚轮识别显示3D坐标(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安徽第一卷 2013年中考安徽名校大联考语文试题(二)扫描版 - 图

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

马上注册会员

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