12864为串行接法。AD0~AD4接的5V电源。
AD5~AD7接的GND。
STC15W408AS 自带8路10位AD
程序只使用了高八位。量程为255.
程序里面含10位AD采集。1024。
代码已注释。
新手上路。有错误还请斧正。
制作出来的实物图如下:
单片机源程序如下:
#include #include"intrins.h" #define uchar unsigned char; #define uint unsigned int; uchar a1,b1; //接收高八位,低八位 uint ad1; //用于接收10位AD数据 #define ADC_POWER 0X80; // 上电状态 #define ADC_FLAG 0x10; // FLAG=1,结束转换。ADC_FLAG:A/D转换结束标志位 #define ADC_START 0X08; // START=1,开始转换。 #define ADC_SPEEDLL 0X00; //540个时钟 #define ADC_SPEEDL 0X20; //360个时钟 #define ADC_SPEEDH 0X40; //180个时钟 #define ADC_SPEEDHH 0X60;//90个时钟 /*12864显示*/ unsigned char tab[]= {"AD1: AD2: "}; unsigned char tab1[]={"AD3: AD4: "}; unsigned char tab2[]={"AD5: AD6: "}; unsigned char tab3[]={"AD7: AD8: "}; uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0~9 sbit rw=P2^6; //12864 input sbit e=P2^7; //12864 clock uint ADC_data; //高八位数据 void chushihua(); //12864初始化 void zhiling(unsigned char zhiling); void shuru(unsigned char n); void shuju(unsigned char shuju); void guding(); void ADC_init(); uchar ADC_P(unsigned char ch); void delay(unsigned char x) { while(x--); } void main() { TMOD=0X11; TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1; chushihua();//12864初始化程序 ADC_init(); //ADC初始化程序 while(1) { ADC_data=ADC_P(0);//ad通道1 delay(5); tab[4]=num[ADC_data/1000]; delay(5); tab[5]=num[ADC_data%1000/100]; delay(5); tab[6]=num[ADC_data%100/10]; delay(5); tab[7]=num[ADC_data%10]; ADC_data=ADC_P(1);//ad通道2 delay(5); tab[12]=num[ADC_data/1000]; delay(5); tab[13]=num[ADC_data%1000/100]; delay(5); tab[14]=num[ADC_data%100/10]; delay(5); tab[15]=num[ADC_data%10]; ADC_data=ADC_P(2);//ad通道3 delay(5); tab1[4]=num[ADC_data/1000]; delay(5); tab1[5]=num[ADC_data%1000/100]; delay(5); tab1[6]=num[ADC_data%100/10]; delay(5); tab1[7]=num[ADC_data%10]; ADC_data=ADC_P(3);//ad通道4 delay(5); tab1[12]=num[ADC_data/1000]; delay(5); tab1[13]=num[ADC_data%1000/100]; delay(5); tab1[14]=num[ADC_data%100/10]; delay(5); tab1[15]=num[ADC_data%10]; ADC_data=ADC_P(4);//ad通道5 delay(5); tab2[4]=num[ADC_data/1000]; delay(5); tab2[5]=num[ADC_data%1000/100]; delay(5); tab2[6]=num[ADC_data%100/10]; delay(5); tab2[7]=num[ADC_data%10]; ADC_data=ADC_P(5);//ad通道6 delay(5); tab2[12]=num[ADC_data/1000]; delay(5); tab2[13]=num[ADC_data%1000/100]; delay(5); tab2[14]=num[ADC_data%100/10]; delay(5); tab2[15]=num[ADC_data%10]; ADC_data=ADC_P(6);//ad通道7 delay(5); tab3[4]=num[ADC_data%1000/100]; delay(5); tab3[5]=num[ADC_data%1000/100]; delay(5); tab3[6]=num[ADC_data%100/10]; delay(5); tab3[7]=num[ADC_data%10]; ADC_data=ADC_P(7);//ad通道8 delay(5); tab3[12]=num[ADC_data/1000]; delay(5); tab3[13]=num[ADC_data%1000/100]; delay(5); tab3[14]=num[ADC_data%100/10]; delay(5); tab3[15]=num[ADC_data%10]; guding(); } } /**************** *以下关于ADC *****************/ void ADC_init() //adc初始化 { P1ASF=0XFF; //设置P1为ADC采集 ADC_RES=0; //清除高八位结果寄存器 ADC_CONTR=0XE0; //ADC上电 A/D转换周期90个时钟周期 delay(5); } uchar ADC_P(unsigned char ch) //ADC处理函数 { ADC_CONTR&=~ADC_FLAG; //关闭标志位 ADC_CONTR=0X80|0X00|0X08|ch; _nop_();_nop_();_nop_();_nop_(); while(!(ADC_CONTR&0x10));//等待ADC转换完成 return ADC_RES; //返回ADC结果 8位AD /* ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|0x00; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); // ADC_data=(a1<<2)|(b1>>6); //10AD */ } /************************* * * *以下12864相关子函数 * *************************/ void shuru(unsigned char n) { unsigned char a; for(a=0;a<8;a++) { e=0;
上一篇:Sdcc编译环境下中断函数的编写
下一篇:STC15F2K60S2单片机数字电压表制作(不用外围A/D换换)
推荐阅读最新更新时间:2024-11-08 21:46
设计资源 培训 开发板 精华推荐
- 使用 MaxLinear, Inc 的 SPX385N-1.2/TR 的参考设计
- DC2326A-A,使用 LTC2345-18 八路、18 位、200ksps 同步采样 SAR ADC 的演示板
- 基于英飞凌IPM做的无刷电机驱动(FOC控制)
- LT3042 的典型应用 - 20V、200mA、超低噪声、超高 PSRR RF 线性稳压器
- LTC4367CDD 用于滞后调节的过压电源控制器的典型应用
- DC995A,使用 LT3080EDD 可调 1.1 A 单电阻低压降稳压器的演示板
- 【单片机】简易数码管电子时钟
- ATSAMA5D4-XULT、SAMA5D4 Xplained Ultra 评估套件,用于基于 SMART SAMA5D4 ARM Cortex-A5 的嵌入式微处理器单元 (eMPU)
- TB2903H 最大功率 47W BTL x 4ch 音频功率的典型应用
- TCR5SB19A、150mA、1.9V 输出电压 CMOS 低压降稳压器的典型应用