代码相关:
/**********lcd1602.c**************/#include #define lcd1602_db p2sbit lcd1602_rs = p0^3;sbit lcd1602_rw = p0^2;sbit lcd1602_e = p0^1;void lcdwaitready(){ unsigned char sta; lcd1602_db = 0xff; lcd1602_rs = 0; lcd1602_rw = 1; do { lcd1602_e = 1; sta = lcd1602_db; //读取状态字 lcd1602_e = 0; } while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}/* 向lcd1602液晶写入一字节命令,cmd-待写入命令值 */void lcdwritecmd(unsigned char cmd){ lcdwaitready(); lcd1602_rs = 0; lcd1602_rw = 0; lcd1602_db = cmd; lcd1602_e = 1; lcd1602_e = 0;}/* 向lcd1602液晶写入一字节数据,dat-待写入数据值 */void lcdwritedat(unsigned char dat){ lcdwaitready(); lcd1602_rs = 1; lcd1602_rw = 0; lcd1602_db = dat; lcd1602_e = 1; lcd1602_e = 0;}void lcdsetcursor(unsigned char x, unsigned char y){ unsigned char addr; if (y == 0) //由输入的屏幕坐标计算显示ram的地址 addr = 0x00 + x; //第一行字符地址从0x00起始 else addr = 0x40 + x; //第二行字符地址从0x40起始 lcdwritecmd(addr | 0x80); //设置ram地址}void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str){ lcdsetcursor(x, y); //设置起始地址 while (*str != '�') //连续写入字符串数据,直到检测到结束符 { lcdwritedat(*str++); }}/* 初始化1602液晶 */void initlcd1602(){ lcdwritecmd(0x38); lcdwritecmd(0x0c); lcdwritecmd(0x06); lcdwritecmd(0x01); }/*********************iic*******************/#include #include #define delay() {_nop_();_nop_();_nop_();_nop_();_nop_();}sbit i2c_scl = p3^7;sbit i2c_sda = p3^6;/* 起始信号 */void i2cstart(){ i2c_sda = 1; i2c_scl = 1; delay(); i2c_sda = 0; delay(); i2c_scl = 0; }/* 停止信号 */void i2cstop(){ i2c_scl = 0; //首先确保sda、scl都是低电平 i2c_sda = 0; delay(); i2c_scl = 1; //先拉高scl delay(); i2c_sda = 1; //再拉高sda delay();}/* i2c总线写操作,dat-待写入字节,返回值-从机应答位的值 */bit i2cwrite(unsigned char dat){ bit ack; unsigned char bitcnt; for (bitcnt=0x80; bitcnt!=0; bitcnt >>=1) { if ((bitcnt&dat) == 0) i2c_sda = 0; else i2c_sda = 1; delay(); i2c_scl = 1; //拉高scl delay(); i2c_scl = 0; //再拉低scl,完成一个位周期 } i2c_sda = 1; delay(); i2c_scl = 1; ack = i2c_sda; delay(); i2c_scl = 0; return (ack); }/* i2c总线读操作,并发送应答信号或者非应答信号,如果cnt为1则发送应答信号,如果cnt为非1的值则发送非应答信号,返回值-读到的字节 */unsigned char i2creadackornot(bit cnt){ unsigned char bitcnt; unsigned char dat; i2c_sda = 1; //首先确保主机释放sda for (bitcnt=0x80; bitcnt!=0; bitcnt >>=1) //从高位到低位依次进行 { delay(); i2c_scl = 1; //拉高scl if(i2c_sda == 0) //读取sda的值 dat &= ~bitcnt; //为0时,dat中对应位清零 else dat |= bitcnt; //为1时,dat中对应位置1 delay(); i2c_scl = 0; //再拉低scl,以使从机发送出下一位 } if(cnt) i2c_sda = 0; //8位数据发送完后,拉低sda,发送应答信号 else i2c_sda = 1; delay(); i2c_scl = 1; //拉高scl delay(); i2c_scl = 0; //再拉低scl完成应答位,并保持住总线 return dat;}/******************main.c*************************/#include bit flags = 1; unsigned char getvalue(unsigned char chn);void numtostring(unsigned char *str, unsigned char val);extern void i2cstart();extern void i2cstop();unsigned char i2creadackornot(bit cnt);extern bit i2cwrite(unsigned char dat);extern void initlcd1602();extern void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str);void main(){ unsigned char val; unsigned char str[10]; ea = 1; //开总中断 tmod &= 0xf0; //清零t0的控制位 tmod |= 0x01; //配置t0为模式1 th0 = (65536-9216)/256; //加载t0重载值,定时10ms tl0 = (65536-9216)%256; et0 = 1; //使能t0中断 tr0 = 1; //启动t0 initlcd1602(); //初始化液晶 lcdshowstr(0, 0, an0: an1: an3:); //显示通道指示 while (1) { if (flags) { flags = 0; //显示通道0的电压 val = getvalue(0); //获取adc通道0的转换值 numtostring(str, val); //转为字符串格式的电压值 lcdshowstr(0, 1, str); //显示到液晶上 //显示通道1的电压 val = getvalue(1); numtostring(str, val); lcdshowstr(6, 1, str); //显示通道3的电压 val = getvalue(3); numtostring(str, val); lcdshowstr(12, 1, str); } }}unsigned char getvalue(unsigned char chn){ unsigned char val; i2cstart(); if(i2cwrite(0x48< <1)) { i2cstop(); return 0; } i2cwrite(0x40 | chn); i2cstart(); i2cwrite(0x48< = 10) //定时100ms { tm100ms = 0; flags = 1; }}an3通道测得实际电压变化,通过滑动变阻器可以改变相应的值;an0通道测得光敏电阻的阻值;an1测得热敏电阻的相应阻值,需要货源才会变化值。
下一个十年:揭示汽车半导体的发展路线图
步阶段的鸿蒙OS 犹如当初的海思麒麟
基于能自主型机器人足球比赛的仿人机器人研究方案
怎样去推进智能楼宇的发展
新能源汽车品牌排行榜
数模A/D和模数D/A转换的基本应用(下)
苹果生态如今怎么样了 或许会像微软一样走开放路线
电力系统电压特性有哪些 电力系统电压波动的主要原因
如何选购激光电视 这些细节需要注意
全数字环路滤波器,什么是全数字环路滤波器
浅谈电池修复技术:电池出厂前的第一次重要检验
cob光源与led光源有什么区别_cob光源与led的区别介绍
学生平价蓝牙耳机推荐、推荐几款适合学生党的平价蓝牙耳机
安科瑞数据中心AMB智能小母线监控解决方案 RS485有线或LORA无线通讯
T-Mobile与SpaceX合作 未来卫星连网成常态
将步进电机与PIC微控制器连接的方式
颜值与速度兼备的荣耀V9和一加3T,最后鹿死谁手?
哈尔滨电网检修结束,无人机成“大功臣”
一步步了解一下开关变压器的组成
AMD Radeon RX 6750 GRE显卡参数