资源描述:
《PIC的AD转换用LCD和数码管显示》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、是用PIC16F887单片机写的C程序,供初学者交流参考。#include//引入头文件__CONFIG(0x20F1);//设置CHOFIG位,调试用__CONFIG(0x3FFF);#defineRSRD4//LCD的引脚的宏定义#defineRWRD5#defineERD6voidBCD(unsignedint);//BCD转换子程序voidSPI_WRITE(char*);//写一字节命令或数据voidDISP_FOUR(char*);//显示4个数据,最先发的移到最后charA[4],WW,QW,BW,SW,GW;//万位,
2、千位。。。到个位constcharLED_CODE[11]=//数码管显示代码{0b11000000,//00b11111001,//10b10100100,//20b10110000,//30b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000,//90b11111111};//灭unsignedintX,Y;//X用于存AD转换结果,Y用于存AD采样通道的电压voiddelay_us(char);//延时us子程序voiddelay_ms(unsignedint);//
3、延时ms子程序voidwrite(charm);//对LCD写数据,子程序voidenable(charm);//对LCD写的位置,子程序voiddisp_init();//LCD初始化voidCSH(void);//芯片初始化子程序voidmain(void){CSH();disp_init();while(1){ADCON0=0b01101001;//设置ADCON0为通道10转换,AD模块使能chari;for(i=0;i<5;i++)NOP();//延时20us让保持电容充电GODONE=1;//AD转换开始while(GODONE==1)
4、;//等待AD转换结束ADIF=0;//清AD转换结束标志位X=0;X=ADRESH<<8;//X用来存AD转换结果X
5、=ADRESL;enable(0x80);//在LCD第一行显示if((X&0x0200)==0)//以下为分别判断X的第9位到第0位的状态,然后分别显示到LCD上,如为0则显示0,反之为1则显示1{write(0x30+0);}else{write(0x30+1);}if((X&0x0100)==0){write(0x30+0);}else{write(0x30+1);}if((X&0x0080)==0){write(0x30+
6、0);}else{write(0x30+1);}if((X&0X0040)==0){write(0x30+0);}else{write(0x30+1);}if((X&0x0020)==0){write(0x30+0);}else{write(0x30+1);}if((X&0x0010)==0){write(0x30+0);}else{write(0X30+1);}if((X&0x0008)==0){write(0x30+0);}else{write(0x30+1);}if((X&0x0004)==0){write(0x30+0);}else{wri
7、te(0x30+1);}if((X&0x0002)==0){write(0x30+0);}else{write(0X30+1);}if((X&0x0001)==0){write(0x30+0);}else{write(0X30+1);}//以上为LCD显示的10位转换结果Y=(int)(X/1023*5000);//Y用来存AD采样电压放大1000倍BCD(Y);//将Y转换为BCD然后送去给数码管显示A[0]=GW;//最先发的个位移到最后A[1]=SW;A[2]=BW;A[3]=QW;DISP_FOUR(A);//要根据LED的在板上的实际位置
8、,确定哪个是千位..个位}}voidCSH(void){TRISD=0;//D口输出PORTD=0;TRISB1=1;//RB1为通道10ANS10=1;//设为模拟口ADCON1=0b10000000;//AD结果右对齐TRISC=0b00010000;//RC3输出(SCK),RC4输入(SDI),RC5输出(SDO)SSPEN=1;//SPI串口使能CKP=1;//空闲时钟为高电平SSPM3=0;SSPM2=0;SSPM1=0;SSPM0=1;//SPI主控模式,时钟为fosc/16SMP=1;//在数据输出时间的末端采样输入数据CKE=0;
9、//在SCK上升沿传输数据}voiddisp_init()//LCD初始化{enable(0x02);//光标归零enab