stillnova stillnova
在凌乱中守护自己的节操。
关注数: 25 粉丝数: 232 发帖数: 1,533 关注贴吧数: 40
为什么没有显示呢!??求助求助!!! 将程序写入HJ-2G,声波测距TRIG接PC1,ECHO接PC2。 #include "iom16v.h" #define F_CPU 11059200UL #define uint unsigned int #define uchar unsigned char #define BIT(X) (1<<X) #define RS PD4 #define WR PD5 #define EN PD6 uint data; uchar const Pang[]="juli:."; uchar const xue[]="cm."; void delay(uint ms) { uint i,j; for(i=0;i<ms;i++) { for(j=0;j<1141;j++); } } //写数据函数 void LCD_Write_Data(unsigned char Data) { PORTD&=~BIT(EN);//EN=0; PORTD|=BIT(RS);//RS=1; PORTB=Data;//送数据 PORTD|=BIT(EN);//EN=1; delay(10); PORTD&=~BIT(EN);//EN=0; } //写命令函数 void LCD_Write_Cmd(unsigned char Cmd) { PORTD&=~BIT(EN);//EN-0; PORTD&=~BIT(RS);//RS=0; PORTB=Cmd;//送命令 PORTD|=BIT(EN);//EN=1; delay(10); PORTD&=~BIT(EN);//EN=0; } //IO初始化 void LCD_IO_Init() { DDRD|=BIT(RS)|BIT(WR)|BIT(EN);//PD4~PD6位输出 DDRB=0xff;//PB口为输出 PORTD&=~BIT(WR);//WR=0; } void LCD_display(void) { uchar i; LCD_Write_Cmd(0x38);//Initial 1602 LCD_Write_Cmd(0x0c);//bit3(1),bit2(1)开显示,bit1(1)显示光标,bit0(1)光标闪耀 LCD_Write_Cmd(0x06);//写一个字节后指针地址自动+1 LCD_Write_Cmd(0x01);//清屏 LCD_Write_Cmd(0x80); for(i=0;Pang[i]!='.';i++) LCD_Write_Data(Pang[i]); LCD_Write_Cmd(0x80+12); for(i=0;xue[i]!='.';i++) LCD_Write_Data(xue[i]); } void display(uint sum) { uint a,b,c,d; a=sum/1000+0x30; b=sum%1000/100+0x30; c=sum%100/10+0x30; d=sum%10+0x30; if(sum<10){a=0x20;b=0x20;c=0x20;} if(sum<100){a=0x20;b=0x20;} if(sum<1000)a=0x20; LCD_Write_Cmd(0x80+6);//第2行从第5列开始 LCD_Write_Data(a); LCD_Write_Data(b); LCD_Write_Data(c); LCD_Write_Data(d); } void start() { PORTC&=~(1<<2); //10us的触发信号,顺便把接收口拉低 PORTC|=(1<<1); delay(15); PORTC&=~(1<<1); } void ceju() { while(!(PINC&0X04)) ; TCNT1H=0; //低电平一过,计时器清零,开始计时 TCNT1L=0; while(PINC&0x04); data=TCNT1L+256*TCNT1H; //高电平过后,计时结束,计算距离 data=data*1.7/150; //本来应该是1.7,1.72是修正后的值(声速跟温度有关), display(data); } int main(void) { DDRC=0xfb; PORTC=0xff; LCD_IO_Init(); LCD_display(); TCCR1A=0X00; TCCR1B=0X02; //8分频 while(1) { start(); ceju(); } }
1 下一页