完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有一个这样的程序,是用AD0832数模转换在1602上显示电压值的。在PROTUSE中仿真是成功的,可是在实物中就失败了,PROTUSE用的主芯片是AT89C51的,而实物的单片机是STC90C52,我想可能会是单片机不同的问题,可是不知道应该怎么更改。还有 我不知道怎么把ADC0832中的数据加到1602中显示出来·· #include #include #define uchar unsigned char #define uint unsigned int ***it CS=P1^0; ***it CLK=P1^1; ***it DIO=P1^2; ***it RS=P2^0; ***it RW=P2^1; ***it EN=P2^2; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define CLR EN=0 #define SET EN=1 uchar Display_Buffer[]="0.00V"; uchar Line1[]="weswssw Voltage:"; void delay_us(unsigned int n) //ÑÓʱ Èç¹ûÐèÒª¸ß¾«¶ÈÑÓʱ ÇëǶÈë»ã±à { if (n == 0) { return ; } while (--n); } void delay_ms(unsigned char i) { unsigned char a, b; for (a = 1; a < i; a++) { for (b = 1; b; b++) { ; } } } void LCD_write_com(unsigned char com) //xie ming ling { RS_CLR; RW_CLR; SET; P0 = com; delay_us(5); CLR; } void Set_Disp_Pos(uchar pos) { LCD_write_com(pos|0x80); } void LCD_write_Data(unsigned char Data) { RS_SET; RW_CLR; SET; P0 = Data; delay_us(5); CLR; } void LCD_Initialise() { LCD_write_com(0x38); /*ÏÔʾģʽÉèÖÃ*/ delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); LCD_write_com(0x08); /*ÏÔʾ¹Ø±Õ*/ LCD_write_com(0x01); /*ÏÔʾÇåÆÁ*/ LCD_write_com(0x06); /*ÏÔʾ¹â±êÒƶ¯ÉèÖÃ*/ delay_ms(5); LCD_write_com(0x0C); } uchar Get_AD_Result() { uchar i,dat1=0,dat2=0; CS=0; CLK=0; DIO=1; _nop_();_nop_(); CLK=1; _nop_();_nop_(); CLK=0;DIO=1;_nop_();_nop_(); CLK=1; _nop_();_nop_(); CLK=0;DIO=0;_nop_();_nop_(); CLK=1;DIO=1;_nop_();_nop_(); CLK=0;DIO=1;_nop_();_nop_(); for(i=0;i<8;i++) { CLK=1; _nop_();_nop_(); CLK=0; _nop_();_nop_(); dat1=dat1<<1|DIO; } for(i=0;i<8;i++) { dat2=dat2|((uchar)(DIO)< CLK=1; _nop_();_nop_(); CLK=0; _nop_();_nop_(); } CS=1; return(dat1==dat2)? dat1:0; } void main() { uchar i; uint d; LCD_Initialise(); delay_ms(100); while(1) { d=Get_AD_Result()*500.0/255 ; Display_Buffer[0]=d/100+'0'; Display_Buffer[2]=d/10%10+'0'; Display_Buffer[3]=d%10+'0'; Set_Disp_Pos(0x01); i=0; while(Line1[i]!=' |