arduino学习笔记10-1602液晶实验2012-04-0809:27[小大]来源:未知转发至:本次试验使用arduino直接驱动1602液晶显示文字1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都是一致的。1602LCD主要技术参数显示容量为16×2个字符;芯片工作电压为4.5~5.5V;工作电流为2.0mA(5.0V);模块最佳工作电压为5.0V;字符尺寸为2.95×4.35(W×H)mm。1602液晶接口引脚定义接口说明:1、两组电源一组是模块的电源一组是背光板的电源一般均使用5V供电。本次试验背光使用3.3V供电也可以工作。2、VL是调节对比度的引脚,串联不大于5KΩ的电位器进行调节。本次实验使用1KΩ的电阻来设定对比度。其连接分高电位与低电位接法,本次使用低电位接法,串联1KΩ电阻后接GND。3、RS是很多液晶上都有的引脚是命令/数据选择引脚该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。4、RW也是很多液晶上都有的引脚是读写选择端该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。5、E同样很多液晶模块有此引脚通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。6、D0—D78位双向并行总线,用来传送命令和数据。7、BLA是背光源正极,BLK是背光源负极。1602液晶的基本操作分以下四种:下图就是1602液晶实物图1602直接与arduino通信,根据产品手册描述,分8位连接法与4位连接法,咱们先使用8位连接法进行实验。硬件连接方式如下图代码如下1.intDI=12;2.intRW=11;3.intDB[]={3,4,5,6,7,8,9,10};//使用数组来定义总线需要的管脚4.intEnable=2;5.6.voidLcdCommandWrite(intvalue){7.//定义所有引脚8.inti=0;9.for(i=DB[0];i=DI;i++)//总线赋值10.{11.digitalWrite(i,value&01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。12.value=1;13.}14.digitalWrite(Enable,LOW);15.delayMicroseconds(1);16.digitalWrite(Enable,HIGH);17.delayMicroseconds(1);//延时1ms18.digitalWrite(Enable,LOW);19.delayMicroseconds(1);//延时1ms20.}21.22.voidLcdDataWrite(intvalue){23.//定义所有引脚24.inti=0;25.digitalWrite(DI,HIGH);26.digitalWrite(RW,LOW);27.for(i=DB[0];i=DB[7];i++){28.digitalWrite(i,value&01);29.value=1;30.}31.digitalWrite(Enable,LOW);32.delayMicroseconds(1);33.digitalWrite(Enable,HIGH);34.delayMicroseconds(1);35.digitalWrite(Enable,LOW);36.delayMicroseconds(1);//延时1ms37.}38.39.voidsetup(void){40.inti=0;41.for(i=Enable;i=DI;i++){42.pinMode(i,OUTPUT);43.}44.delay(100);45.//短暂的停顿后初始化LCD46.//用于LCD控制需要47.LcdCommandWrite(0x38);//设置为8-bit接口,2行显示,5x7文字大小48.delay(64);49.LcdCommandWrite(0x38);//设置为8-bit接口,2行显示,5x7文字大小50.delay(50);51.LcdCommandWrite(0x38);//设置为8-bit接口,2行显示,5x7文字大小52.delay(20);53.LcdCommandWrite(0x06);//输入方式设定54.//自动增量,没有显示移位55.delay(20);56.LcdCommandWrite(0x0E);//显示设置57.//开启显示屏,光标显示,无闪烁58.delay(20);59.LcdCommandWrite(0x01);//屏幕清空,光标位置归零60.delay(100);61.LcdCommandWrite(0x80);//显示设置62.//开启显示屏,光标显示,无闪烁63.delay(20);64.}65.66.voidloop(void){67.LcdCommandWrite(0x01);//屏幕清空,光标位置归零68.delay(10);69.LcdCommandWrite(0x80+3);70.delay(10);71.//写入欢迎信息72.LcdDataWrite('W');73.LcdDataWrite('e');74.LcdDataWrite('l');75.LcdDataWrite('c');76.LcdDataWrite('o');77.LcdDataWrite('m');78.LcdDataWrite('e');79.LcdDataWrite('');80.LcdDataWrite('t');81.LcdDataWrite('o');82.delay(10);83.LcdCommandWrite(0xc0+1);//定义光标位置为第二行第二个位置84.delay(10);85.LcdDataWrite('g');86.LcdDataWrite('e');87.LcdDataWrite('e');88.LcdDataWrite('k');89.LcdDataWrite('-');90.LcdDataWrite('w');91.LcdDataWrite('o');92.LcdDataWrite('r');93.LcdDataWrite('k');94.LcdDataWrite('s');95.LcdDataWrite('h');96.LcdDataWrite('o');97.LcdDataWrite('p');98.delay(5000);99.LcdCommandWrite(0x01);//屏幕清空,光标位置归零100.delay(10);101.LcdDataWrite('I');102.LcdDataWrite('');103.LcdDataWrite('a');104.LcdDataWrite('m');105.LcdDataWrite('');106.LcdDataWrite('h');107.LcdDataWrite('o');108.LcdDataWrite('n');109.LcdDataWrite('g');110.LcdDataWrite('y');111.LcdDataWrite('i');112.delay(3000);113.LcdCommandWrite(0x02);//设置模式为新文字替换老文字,无新文字的地方显示不变。114.delay(10);115.LcdCommandWrite(0x80+5);//定义光标位置为第一行第六个位置116.delay(10);117.LcdDataWrite('t');118.LcdDataWrite('h');119.LcdDataWrite('e');120.LcdDataWrite('');121.LcdDataWrite('a');122.LcdDataWrite('d');123.LcdDataWrite('m');124.LcdDataWrite('i');125.LcdDataWrite('n');126.delay(5000);127.}arduino学习笔记12-ADXL345加速度传感器实验2012-04-0809:30[小大]来源:未知转发至:前两天我们做了温度传感器实验,大家一定还有印象。今天我们来研究另外一种传感器加速度传感器。什么是加速度传感器加速度传感器,作用是测量在加速过程中产生的力。最基本的如咱们平常所熟悉的是重力加速度,大小是1g。加速度传感器一般用于什么地方通过测量由重力引起的加速度,你可以计算出设备相对于水平面的倾斜角度。通过分析动态加速度,你可以分析出设备的移动方式。自平衡车中就是使用加速度传感器与陀螺仪进行卡尔曼滤波进行姿态矫正。本次试验使用的ADXL345数字传感器,通过I2C或者SPI接口直接输出数字信号。在1g的加速度下,输出数值为256.2011-7-2822:56:15上传下载附件(24.89KB)下面是硬件连接图2011-7-2922:16:48上传下载附件(112.73KB)2011-7-2915:58:16上传下载附件(164.15KB)2011-7-2822:56:16上传下载附件(203.65KB)下面是代码1.#includeWire.h//调用arduino自带的I2C库2.#includeLiquidCrystal.h//调用arduino自带的LiquidCrystal库3.4.#defineRegister_ID05.#defineRegister_2D0x2D6.#defineRegister_X00x327.#defineRegister_X10x338.#defineRegister_Y00x349.#defineRegister_Y10x3510.#defineRegister_Z00x3611.#defineRegister_Z10x3712.13.LiquidCrystallcd(12,11,10,9,8,7);//设置接口14.15.intADXAddress=0xA71;//转换为7位地址16.intreading=0;17.intval=0;18.intX0,X1,X_out;19.intY0,Y1,Y_out;20.intZ1,Z0,Z_out;21.doubleXg,Yg,Zg;22.23.voidsetup()24.{25.lcd.begin(16,2);//初始化LCD26.delay(100);27.Wire.begin();//初始化I2C28.delay(100);29.Wire.beginTransmission(ADXAddress);30.Wire.send(Register_2D);31.Wire.send(8);32.Wire.endTransmission();33.}34.35.voidloop()36.{37.Wire.beginTransmission(ADXAddress);38.Wire.send(Register_X0);39.Wire.send(Register_X1);40.Wire.endTransmission();41.Wire.requestFrom(ADXAddress,2);42.if(Wire.available()=2);43.{44.X0=Wire.receive();45.X1=Wire.receive();46.X1=X18;47.X_out=X0+X1;48.}49.50.Wire.beginTransmission(ADXAddress);51.Wire.send(Register_Y0);52.Wire.send(Register_Y1);53.Wire.endTransmission();54.Wire.requestFrom(ADXAddress,2);55.if(Wire.available()=2);56.{5