完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//1602显示中RS接PD4,WR接PD5,EN接PD6,PB接数据。声波测距TRIG接PC1,ECHO接PC2。
#include #include til/delay.h> #define uint unsigned int #define uchar unsigned char #define BIT(X) (1< #define WR PD5 #define EN PD6 uint data; uchar const Pang[]="juli:."; uchar const xue[]="cm."; //写数据函数 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_ms(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_ms(10); PORTD&=~BIT(EN); //EN=0; } //IO初始化 void LCD_IO_Init(void) { 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 delay(uint ms) { uint x,y; for(x=0;x for(y=0;y<1141;y++); } } void delay_us(uint us)//1us延时程序,用于使端口输出稳定 { "nop"; } 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(void) { PORTC&=~(1<<2); //10us的触发信号,顺便把接收口拉低 PORTC|=(1<<1); _delay_us(25); PORTC&=~(1<<1);} int ceju() { while(!(PINC&BIT(2))==0); TCNT1H=0; //低电平一过,计时器清零,开始计时 TCNT1L=0; while((PINC&BIT(2))==0); 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(); delay(100); TCCR1A=0X00; TCCR1B=0X02; //8分频 while(1) {data=0; int j; start(); for(j=0;j<400;j++){ "nop";} ceju(); delay(1000); } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5125 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7769 浏览 0 评论
3027 浏览 2 评论
3103 浏览 1 评论
10055 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 11:56 , Processed in 0.570561 second(s), Total 56, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号