《转换示例程序》由会员分享,可在线阅读,更多相关《转换示例程序(8页珍藏版)》请在金锄头文库上搜索。
1、STC12C5A60S2 AD转换示例程序#include #define uint unsigned int #define uchar unsigned char sbit CS=P20; /LCD12864串行通信片选 sbit SID=P21; /LCD12864串行通信数据口 sbit SCLK=P22; /LCD12864串行通信同步时钟信号 sbit PSB=P25; /LCD12864并/串选择:H并行 L串行 unsigned int temp1,sh1,ge1,n1,m1; unsigned char ad_result_data10; /AD转换高八位 unsigned
2、char ad_result_low210; /AD转换低八位 unsigned char ad_result_total10; /AD转换总十位 unsigned char ad_average_result; /AD转换十次的平均值 unsigned char Ain,Vin; unsigned char b,t,R; char tp=0; unsigned char code ma16=0xb5,0xe7,0xd1,0xb9,0xa1,0xc3; /电压: unsigned char code ma2=.; uchar code disp1=提示: 按1 键进入; uchar code
3、disp2=功能选择界面. ; unsigned char code num0=0xa3,0xb0; unsigned char code num1=0xa3,0xb1; unsigned char code num2=0xa3,0xb2; unsigned char code num3=0xa3,0xb3; unsigned char code num4=0xa3,0xb4; unsigned char code num5=0xa3,0xb5; unsigned char code num6=0xa3,0xb6; unsigned char code num7=0xa3,0xb7; unsi
4、gned char code num8=0xa3,0xb8; unsigned char code num9=0xa3,0xb9; /-模块延时程序- 1ms void delay1ms(uint delay1ms) /STC11F60XE,22.1184M,延时1ms uint i,j; for(;delay1ms0;delay1ms-) for(i=0;i7;i+) for(j=0;j0;delay-) for(i=0;i124;i+); for(j=0;j124;j+); /* AD转换程序 */ void AD_initiate() /初始化函数 ES=0; TMOD=0x21; /定
5、时计数器方式控制寄存器,自动重装,16位计数器. SCON=0x50; /串行控制寄存器,方便在串口助手那观察 TH1=0xfa; TL1=0xfa; TR1=1; void ADC_Power_On() /AD转换电 ADC_CONTR|=0x80; delay(5); /必要的延时 void get_ad_result() /取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据 uint i,q=0; for(i=0;i4; /-电压采样程序- void caiyangP10() /测电压 P1M0|=0x01; /设P1_0为开漏模式 如: P1_0= #00000
6、000B P1M1|=0x01; ADC_CONTR=0xe0; /设置P1.0为输入AD转换口 delay(2); get_ad_result(); /取转换数据 Vin=ad_average_result; R=Vin; /*-写控制字到LCD-*/ void write_cmd(uchar cmd) uchar i; uchar i_data; i_data=0xf8; /命令控制字:写指令 写数据 读状态 读数据 CS=1; /片选置高,才能进行读写操作 SCLK=0; /*-写命令控制字-*/ for(i=0;i8;i+) /循环八次,每次读取一位数据 SID=(bit)(i_dat
7、a&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ /*-写指令高四位-*/ i_data=cmd; i_data=i_data&0xf0; /把低四位置0 for(i=0;i8;i+) /循环八次,每次读取一位数据 SID=(bit)(i_data&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ /*-写指令低四位-*/ i_data=cmd; i_data=i_data4; /左移四位,把低四位的数据
8、移到高四位,再把低四位置0 for(i=0;i8;i+) /循环八次,每次读取一位数据 SID=(bit)(i_data&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ CS=0; /把片选置低 delay1ms(5); /延时是因为没有进行忙检测,适当的延时可以不进行忙检测 /*-*/ /*-写数据到LCD-*/ void write_dat(uchar dat) uchar i; uchar i_data; i_data=0xfa; CS=1; for(i=0;i8;i+) SID=(bit)(
9、i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; i_data=dat; i_data=i_data&0xf0; for(i=0;i8;i+) SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; i_data=dat; i_data=i_data4; for(i=0;i8;i+) SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; CS=0; delay1ms(5); /*-*/ /*-显示坐标-*/ void lcd_pos(uchar x,uchar y) /汉字显示坐标,x为哪一行,y为哪一列 uchar pos; if(x=0) x=0x80; /第一行 else if(x=1) x=0x90; /第二行 else if