




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*我写的51AD转换程序,LED灯显示,随着外部电压升高,亮的小灯数会逐渐增加*/#include/包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件unsigned char result; /A/D转换结果变量 void main(void)unsigned long i;unsigned char status;ADC_CONTR|=0x80; /开A/D转换电源,第一次使用时要打开内部模拟电源for (i=0;i10000;i+); /适当延时P1ASF=0x04;/选择P1.2作为A/D转换通道ADC_CONTR=0xE2; for (i=0;i10000;i+); /适当延时while(1) /循环进行A/D 转换ADC_CONTR|=0x08; /启动 A/D 转换status=0;while(status=0) /等待A/D转换结束 status=ADC_CONTR&0x10;ADC_CONTR&=0xE7; /将ADC_FLAG清0result=ADC_RES; /保存A/D转换结果if(result32)P0=0xff;else if(result64)P0=0xfe;else if(result96)P0=0xfc;else if(result128)P0=0xf8;else if(result160)P0=0xf0;else if(result192)P0=0xe0;else if(result214)P0=0xc0;else if(result236)P0=0x80;else P0=0x00;/*-*/ /*-*功能【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);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江师范大学行知学院《中外管理思想比较》2023-2024学年第二学期期末试卷
- 太原幼儿师范高等专科学校《数据库原理与应用(MySQL)》2023-2024学年第二学期期末试卷
- 铁岭卫生职业学院《艺术专业大学英语》2023-2024学年第二学期期末试卷
- 西安交通大学《综合英语听说》2023-2024学年第二学期期末试卷
- 红岩子大桥施工方案
- 2025水电劳务施工合同
- 2025涉外知识产权许可合同范本:知识产权许可合同模板
- 宿州职业技术学院《信号检测与估值》2023-2024学年第二学期期末试卷
- 船舶上水吊装方案范本
- 辽宁师范高等专科学校《互动媒体设计》2023-2024学年第二学期期末试卷
- 中华八大菜系-闽菜
- 山东省威海市2022年中考地理试题
- 中国古典民族乐器分类琵琶二胡乐理文化传承知识介绍实用课件两篇
- 玩吧 一站到底题库
- 清洗燃气锅炉施工方案设计
- 保安外包服务投标方案(技术标)
- 2023年浙江杭州市属事业单位统一招聘工作人员371人笔试参考题库(共500题)答案详解版
- 《公路工程用泡沫混凝土》
- 国家开放大学《人文英语3》章节测试参考答案
- 江苏省四星级高中评估标准及评价细则
- 长江下游福南水道12.5米进港航道治理工程环评报告
评论
0/150
提交评论