免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*-*/ /*-*功能【AD转换,液晶显示】*-*/*-*芯片:【STC12C5A60S2】*-*/*-*液晶:【LCD1602】*-*/*-*ADC管脚:【P1.0P1.7 】*-*/*-*检测范围:【0.004.99V】*-*/*-*/ #include reg52.h #include intrins.h typedef unsigned char uchar; typedef unsigned int uint; #define _Nop() _nop_()/*-以下为LCD1602显示模块定义-*/unsigned char data_char_table= 0123456789ABCDEF;/LCD数据unsigned char Lcd_Dis1_table = Position:No. ;/第一行显示框架unsigned char pos_char_table = D ;/ 显示位置unsigned char Lcd_Dis2_table = Voltage : V;/第二行显示框架unsigned char num_char_table = 9A.CD V;/ 显示位置sbit lcd_rs_port = P27; /定义LCD控制端口,根据硬件调整sbit lcd_rw_port = P26;sbit lcd_en_port = P24;#define lcd_data_port P0void lcd_delay(uchar ms);/LCD1602 延时void lcd_busy_wait(); /LCD1602 忙等待void lcd_command_write(uint command); /LCD1602 命令字写入void lcd_system_reset();/LCD1602 初始化void lcd_char_write(uint x_pos,y_pos,lcd_dat); /LCD1602 字符写入void lcd_bad_check(); /LCD1602 坏点检查void Num_to_Disp(uchar i, uint Num);/显示数据处理void LcdDisp(uchar j, uint num);/液晶显示函数/*-以下为ADC相应寄存器初始化及端口定义-*/ /* 定义与ADC相关的特殊功能寄存器 */ sfr ADC_CONTR = 0xBC; /ADC控制寄存器 sfr ADC_RES = 0xBD; /ADC hight 8-bit result register sfr ADC_RESL = 0xBE; /ADC low 2-bit result register sfr P1ASF = 0x9D; /P1口功能控制寄存器P1ASF/*定义相应操作位*/ #define ADC_POWER 0x80 /ADC电源控制位,0:关闭,1:打开#define ADC_FLAG 0x10 /ADC结束标志位#define ADC_START 0x08 /ADC启动控制位 #define ADC_SPEEDLL 0x00 /540 clocks_选择转换速度/*-以下为相关函数声明-*/ void InitADC();/ADC初始化uint GetADCResult(uchar ch); void Delay(uint n); /延时程序void delay_1ms(uchar x);/*- 主函数 -*/ void main() uchar i;lcd_system_reset(); /LCD1602 初始化lcd_bad_check(); /LCD1602 坏点检查 InitADC(); /初始化ADC特殊功能寄存器 while (1) i = 0;while(i 7) LcdDisp(i, GetADCResult(i); /液晶1602显示输入电压值(P1.0 - P1.7)Delay(1000);i+; /*- ADC 取值 -*/ uint GetADCResult(uchar ch) ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); /Must wait before inquiry _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG); /Wait complete flag ADC_CONTR &= ADC_FLAG; /Close ADC return (ADC_RES*4 + ADC_RESL); /Return ADC result /*- 初始化ADC特殊功能寄存器 -*/ void InitADC( ) P1ASF = P1 | 0x3f; /Set P1.0 - P1.5 as analog input port ADC_RES = 0; /Clear previous result ADC_RESL = 0; ADC_CONTR = ADC_POWER | ADC_SPEEDLL ; Delay(20); /ADC power-on delay and Start A/D conversion /*- LCD1602相应函数 -*/ /以下为LCD显示数据处理/void Num_to_Disp(uchar i, uint Num)float NUM;int xx, yy, zz;NUM = (Num * 5/ 1024.0);/计算公式:10-bit A/D Conversion Result = 1024 x (Vin / Vcc)xx = (int)NUM;yy = (int)(NUM - (float)(xx) * 10);zz = (int)(NUM - (float)(xx) * 100)%10; num_char_table9 = data_char_tablexx / 10;/电压值十位num_char_table10= data_char_tablexx % 10;/电压值个位num_char_table12= data_char_tableyy;/电压值小数点后一位num_char_table13= data_char_tablezz;/电压值小数点后两位?pos_char_table13= data_char_tablei;/当前ADC接口/以下为LCD显示/void LcdDisp(uchar j, uint num)uint i=0;for (i=0;i16;i+) lcd_char_write(i,0,Lcd_Dis1_tablei);lcd_char_write(i,1,Lcd_Dis2_tablei); /显示框架 Num_to_Disp(j, num);lcd_char_write(13,0,pos_char_table13);for(i = 9; i 14; i+)lcd_char_write(i,1,num_char_tablei); /显示电压 delay_1ms(100);/以下是LCD1602驱动程序/void lcd_delay(uchar ms) /*LCD1602 延时*/ uchar j; while(ms-) for(j=0;j250;j+) ; void lcd_busy_wait() /*LCD1602 忙等待*/ lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_port = 0xff; while (lcd_data_port&0x80); lcd_en_port = 0; void lcd_command_write(uint command) /*LCD1602 命令字写入*/ lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = command; lcd_en_port = 1; lcd_en_port = 0; void lcd_system_reset() /*LCD1602 初始化*/ lcd_delay(20); lcd_command_write(0x38); lcd_delay(100); lcd_command_write(0x38); lcd_delay(50); lcd_command_write(0x38); lcd_delay(10); lcd_command_write(0x08); lcd_command_write(0x01); lcd_command_write(0x06); lcd_command_write(0x0c); void lcd_char_write(uint x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/ x_pos &= 0x0f; /* X位置范围 015 */ y_pos &= 0x01; /* Y位置范围 0 1 */ if(y_pos=1) x_pos += 0x40; x_pos += 0x80; lcd_command_write(x_pos); lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; void lcd_bad_check() /*LCD1602 坏点检查*/ char i,j; for(i=0;i2;i+) for(j=0;j16;j+) lcd_char_write(j,i,0xff); lcd_delay(200); lcd_delay(200);lcd_delay(200);lcd_delay(100);lcd_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国广电甘肃网络股份有限公司临夏州分公司招聘考试笔试参考题库附答案解析
- 2025河南郑州刘寨社区卫生服务中心招聘9人考试笔试参考题库附答案解析
- 2025云南丽江宁蒗县委社会工作部招聘公益性岗位1人考试笔试参考题库附答案解析
- 2025重庆医科大学附属第二医院中西医结合医学中心技师(编外)招聘2人笔试考试备考试题及答案解析
- 2025中国长江三峡集团有限公司浙江分公司社会招聘4人(第二批)考试笔试参考题库附答案解析
- 2025内蒙古巴彦淖尔市磴口县公益性岗位招聘笔试考试参考试题及答案解析
- 2025贵州现代物流产业(集团)有限责任公司运营管理高层次人才招聘笔试考试参考试题及答案解析
- 2025广东揭阳市军人随军家属招聘17人笔试考试参考题库及答案解析
- 2026国家移民管理局直属事业单位招聘事业编制16人笔试考试参考试题及答案解析
- 2026陕西省面向北京邮电大学招录选调生考试笔试模拟试题及答案解析
- 2025年重庆市重庆市永川区辅警招聘考试题库附答案解析
- 《篮球-双手胸前传接球》教案
- 合资建设商厦协议书
- 2025山东发展投资控股集团有限公司权属企业公开招聘(249人)考试笔试参考题库附答案解析
- DL5190.5-2019电力建设施工技术规范第5部分:管道及系统
- GB/T 25920-2010饮用冷水水表塑料表壳及承压件技术规范
- GB/T 13773.2-2008纺织品织物及其制品的接缝拉伸性能第2部分:抓样法接缝强力的测定
- 机械制图说课 三视图的形成及投影规律
- 通信发展史课件
- 灰姑娘Cinderella英语故事精选推荐课件
- 8-《天工开物》两则课件
评论
0/150
提交评论