stc12c5a60sad转换及lcd1602显示

上传人:F****n 文档编号:102556271 上传时间:2019-10-03 格式:DOC 页数:7 大小:34.50KB
返回 下载 相关 举报
stc12c5a60sad转换及lcd1602显示_第1页
第1页 / 共7页
stc12c5a60sad转换及lcd1602显示_第2页
第2页 / 共7页
stc12c5a60sad转换及lcd1602显示_第3页
第3页 / 共7页
stc12c5a60sad转换及lcd1602显示_第4页
第4页 / 共7页
stc12c5a60sad转换及lcd1602显示_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《stc12c5a60sad转换及lcd1602显示》由会员分享,可在线阅读,更多相关《stc12c5a60sad转换及lcd1602显示(7页珍藏版)》请在金锄头文库上搜索。

1、/*我写的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;i1000

2、0;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 i

3、f(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; #

4、define _Nop() _nop_()/*-以下为LCD1602显示模块定义-*/unsigned char data_char_table= ABCDEF;/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;

5、/定义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

6、 字符写入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 r

7、egister 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

8、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);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号