ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:16.95KB ,
资源ID:7584374      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7584374.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STC12C5A60SAD转换及LCD1602显示.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STC12C5A60SAD转换及LCD1602显示.docx

1、STC12C5A60SAD转换及LCD1602显示STC12C5A60SAD转换及LCD1602显示/*我写的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+); /适当延时 P1

2、ASF=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清0 result=ADC_RES; /保存A/D转换结果 if(result32) P0=0xff; else if(result64) P0=0xfe; else if(result9

3、6) 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 reg

4、52.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_tab

5、le = 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); /LCD160

6、2 命令字写入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控制

7、寄存器 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_选择

8、转换速度/*-以下为相关函数声明-*/ 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);

9、/液晶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 (AD

10、C_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相应函数 -*/ /

11、以下为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

12、_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_cha

13、r_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

14、 忙等待*/ 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_por

15、t = 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_wri

16、te(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 =

17、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_delay(200); lcd_command_write(0x01); /* clear lcd disp */以上是LCD1602驱动程序/*- 延时程序 -*/ void Delay(uint n) uint x; while (n-) x = 500; while (x-); /*1MS为单位的延时程序*/void delay_1ms(uchar x) uchar j;while(x-) for(j=0;j125;j+) ;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1