利用串行A/D转换器TLC549对输入信号电压源进行采集转换成数字信号给51单片机,经单片机进行数据处理后给1602液晶显示。 误差小于1%. #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar LCD[6]; //电压数据转换成LCD1602液晶字符显示 uint Volt; sbit DO = P1^0; //时钟 sbit CS = P1^1; //片选 sbit CLK = P1^2; //数据输出 sbit RS = P2^0; //1602液晶数据/命令选择端 sbit RW = P2^1; //1602液晶读写端 sbit E = P2^2; //1602液晶使能端 // Function Prototypes void check_busy(void); void write_command(uchar com); void write_date(uchar date); void LCD_init(void); void string(uchar ad ,uchar *s); //void lcd_test(void); void delay(uint); void Volt_To_LCD1602(void); void delay_ms(uint xms); void Data_Conversion(void); uchar TLC549_ADC(void); /******************************************* LCD1602 Driver mapped as IO peripheral *******************************************/ // Delay // Delay void delay(uint j) { uchar i = 60; for(; j>0; j--) { while(--i); i = 59; while(--i); i = 60; } } // Test the Busy bit void check_busy(void) { do { P0 = 0xff; E = 0; RS = 0; RW = 1; E = 1; _nop_(); } while(P0 & 0x80); E = 0; } // Write a command void write_command(uchar com) { check_busy(); E = 0; RS = 0; RW = 0; P0 = com; E = 1; _nop_(); E = 0; delay(1); } // Write Data void write_date(uchar date) { check_busy(); E = 0; RS = 1; RW = 0; P0 = date; E = 1; _nop_(); E = 0; delay(1); } // Initialize LCD controller void LCD_init(void) { write_command(0x38); // 8-bits, 2 lines, 7x5 dots write_command(0x0C); // no cursor, no blink, enable display write_command(0x06); // auto-increment on write_command(0x01); // clear screen delay(1); } // Display a string void string(uchar ad, uchar *s) { write_command(ad); while(*s>0) { write_date(*s++); delay(100); } } //****************************************************// //函数名:delay_ms(uint xms) //函数功能:ms级延时函数 //***************************************************// void delay_ms(uint xms) { uint x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); } //***************************************************// //函数名称:TLC549_ADC() //函数功能:读取上一次A/D转换的数据,启动下一次A/D转换 //**************************************************// uchar TLC549_ADC(void) { uchar n, tmp; CS = 1; //CS置高,片选无效 CLK = 0; CS = 0; //CS置低,片选有效,同时DO输出高位 _nop_(); _nop_(); //适当延迟时间1.4us Setup Time for(n = 0; n < 8; n++) //串行数据移位输入 { tmp <<= 1; tmp |= DO; CLK = 1; //0.4us _nop_(); //CLK transition time Max 0.1us CLK = 0; //0.4us } CS = 1; //CS置高,片选无效 for(n = 17; n != 0; n--) _nop_(); //Next Coversion需要延迟17us return (tmp); } //****************************************// //函数名称 ![]() //函数功能:电压换算 //*****************************************// void Data_Conversion(void) { uchar AD_Data; AD_Data = TLC549_ADC(); delay_ms(1000); Volt = 5.0 / 256 * AD_Data*1000; } void Volt_To_LCD1602(void) { Data_Conversion(); //电压换算并放大1000倍 LCD[0] = Volt/1000; //千位 LCD[1] = '.'; //小数点 LCD[2] = Volt/100%10; //百位 LCD[3] = Volt/10%10; //十位 LCD[4] = Volt%10; //个位 LCD[5] = 'V'; //字符V write_command(0x80+8); write_date(0x30+LCD[0]); write_date(LCD[1]); write_date(0x30+LCD[2]); write_date(0x30+LCD[3]); write_date(0x30+LCD[4]); write_date(LCD[5]); } int main() { //uint m; LCD_init(); delay(100); write_command(0x01); write_command(0x80); string(0x80,"Voltage:"); delay_ms(2000); while(1) { Volt_To_LCD1602(); } } |
问题: 我想要输入enter,自动提交解决方案: @keyup.enter.native="你的提交处理函数" <!-- 修改参数的对话框 --> <el-dialog :title="'修改' + titleText" :visible.sync="editDialogVisible" width="50%" @close="editDialogClosed"> <!-- 修改参数的对话框 --> <el-form :mo_vue input输入后自动触发提交
前几天在 Lexus 官网看到有这样的一个效果:http://www.lexus.com.cn/models/es/360于是顺手打开控制台看了下他们是怎么做的,发现使用的技术还是比较简单的,通过背景图的切换来完成全景的效果。心血来潮自己做了一个优化一点的版本,先上DEMO和 源码。(由于图片资源较大,加载时间较长,请耐心等待)接下来分享下我的制作流程。首先观察下他们的图片链...
在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高、使用上更方便,关于IOS平台各种解析XML库的优缺点分析,可以看下这篇文章:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project这里_gdata xml解析
automake中的AC_ARG_WITH和AM_CONDITIONAL使用示例AC_ARG_WITHAC_ARG_WITH(common,"--with-common prefix for installed COMMON-LIBRARY",COMMON_LIBRARY_HOME=$withval,COMMON_LIBRARY_HOME=)AC_SUBST
一.在vue单文件中html格式化失败原因: 在vuter默认配置中: “vetur.format.defaultFormatter.html”: “none”,解决:在user setting中设置 “vetur.format.defaultFormatter.html”: “js-beautify-html”,二.在拉下代码或者修改""双引号->’'单引号 后格式化 “单引号-..._volar与eslint冲突
Photography can bevery technical, especially in the digital age. But photography is, at it’s core, art. You can take a technically perfect photo that’s utterly boring and a technically imperfect phot...
1.目录指令(1)ls:显示当前目录下的文件名选项-a显示隐藏文件(以.开头的文件),-d打印目录名,-l列出文件的详细信息(2)pwd:显示当前所在的绝对路径绝对路径:唯一路径(从根目录开始表达路径,/被称为根目录)相对路径:相对于一个指定位置,当前所在的路径(3)mkdir:创建目录 选项-p创建多层级目录(4)rmdir:删除空目录选项:-p 多层级空目录的递归删除(5)rm:可以同时删除文件或目录,它不带选项不能删目录,带选项可以删目录 选项:-f强制删除,忽略提示信息,直接删_列举5条基本指令
body{ font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}html, body{ }h1 { font-size:1.5em; font-wei..._porttmp
Project Euler Program 13或5的倍数在小于10的自然数中,3或5的倍数有3、5、6和9,这些数之和是23。求小于1000的自然数中所有3或5的倍数之和。//解法一:暴力解法#include <iostream>using namespace std;int main() { int ans = 0; for (int i = 3; i < 1000; i++) { if (i % 3 == 0 || i % 5 == 0)_欧拉少儿编程
Linux系统如何进行无损的4k对齐?Linux系统已经安装好了,折腾很久了,不想重装。Windows里知道有ParagonAlignmentTool对齐,Linux上找不到。下面我磁盘的一些信息:$sudo fdisk -lDisk /dev/sda:223.6 GiB,240057409536 字节,468862128 个扇区单元:扇区 / 1 * 512 = 512 字节扇区大小(逻辑/物理..._分区1未起始于物理扇区边界
1、到网站http://buildroot.uclibc,org/downloa里载较新的buildroot版本buildroot-2009.02.tar..gz。并将该包解压并更名为buildroot。 2、 由于我们平台所采用的内核版本是linux2。4.所以我们在配置buildroot编译选项时,应选上linux2.4的内核。但现在buildroot默认选项中没有linux2.4内核