完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
此前我们已经对单片机的基本功能有了一定的了解,接下来我们介绍一下几款常见的单片机外部设备。首先是常用的LCD显示屏模块,此处选用LCD1602(器件名LM016L)进行介绍。然后是AD转换的部分,这里选择并行的ADC0808和DAC0808进行介绍。最后介绍一个使用I2C通信协议的AT24C1024外置EEPROM模块。 以上几种模块都是比较常见的外设组件。在此仅对各个模块做一个简单的介绍,并给出一套简单的例程示范。详细的使用方法请参考相应器件的数据手册。
LCD1602的基本动作如下: static void Wait(void) //忙检测函数,最高位是0允许执行,1等待 { unsigned char sta = 0; data = 0xff; rs = 0; // 选择发送命令模式 rw = 1; // 选择读取模式 do{ en = 1; sta = data; en = 0; //使能,用完就拉低,释放总线 }while(sta & 0x80); } void Write(unsigned char rsc,unsigned char cmd) //写指令/数据函数,rsc是0写入指令,1写入数据 { Wait(); // 先等待LCD1602处于不忙状态 en = 0; // 禁止LCD rs = rsc; // 选择发送模式 rw = 0; // 选择写入模式 data = cmd; // 写数据 en = 1; // 使能LCD en = 0; // 禁止LCD } 具体使用流程如下: 首先,进行LCD1602初始化。 void Init() { Write(0, 0x38); // 按照数据手册,发送38H delay5ms(); // 延时5ms Write(0, 0x38); // 按照数据手册,发送38H delay5ms(); // 延时5ms Write(0, 0x38); // 按照数据手册,发送38H delay5ms(); // 延时5ms Write(0, 0x38); // 显示模式设置 Write(0, 0x08); // 关闭显示 Write(0, 0x01); // 清屏(同时清数据指针) Write(0, 0x06); // 读写后指针自动加1 Write(0, 0x0c); // 开显示,不显示光标 } 此部分主要是按照初始化时序输入指令进行初始化,以及模式设置,然后就可以进行字符串显示了。 void SetCursor(unsigned char x, unsigned char y) //设置坐标,LCD1602的坐标地址为第一行0x80-0x8f,第二行0xc0-0xcf { Write(0, 0x80 + 0x40*y + x); } void ShowStr(unsigned char x, unsigned char y, unsigned char *pStr) //在指定坐标显示字符串 { SetCursor(x, y); //设置起点的坐标 while (*pStr != ' |