📄 shiyan.c
字号:
#include<iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define RS_1 PORTA|=(1<<3)
#define RS_0 PORTA&=~(1<<3)
#define RW_1 PORTA|=(1<<4)
#define RW_0 PORTA&=~(1<<4)
#define EN_1 PORTA|=(1<<5)
#define EN_0 PORTA&=~(1<<5)
unsigned char dispcode[]="0123456789ABCDEF";
unsigned char str1[]={"number is: "};
/*************************lcd1602程序**************************/
void delay1ms(uint i)//延时1毫秒(不够精确的)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<1142;j++);
}
void wr_com(unsigned char com)//写指令//
{
delay1ms(1);
RS_0;
RW_0;
EN_0;
PORTB=com;
delay1ms(1);
EN_1;
delay1ms(1);
EN_0;
}
void wr_dat(unsigned char dat)//写数据//
{
delay1ms(1);
RS_1;
RW_0;
EN_0;
PORTB=dat;
delay1ms(1);
EN_1;
delay1ms(1);
EN_0;
}
void lcd_init()//初始化设置//
{
DDRB|=0xFF; /*I/O口方向设置*/
DDRA|=(1<<3)|(1<<4)|(1<<5);
delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void display(unsigned char *p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
/******************************ds1820程序***************************************/
void delay_18B20(int time)
{
do
time--;
while(time>1);
}
unsigned char ds1820rst()/*ds1820复位*/
{
unsigned char ack;
DDRA|=0x01;
PORTA&=0xfe;
delay_18B20(500);
PORTA|=0x01;
DDRA&=0xfe;
delay_18B20(75);
ack=PINA;
ack&=0x01;
delay_18B20(500);
return ack;
}
unsigned char ds1820rd()/*读数据*/
{
unsigned char i,byte,temp;
byte=0x00;
for (i=0;i<8;i++)
{
DDRA|=0x01;
PORTA&=0xfe;//给脉冲信号
delay_18B20(3);
PORTA|=0x01;
DDRA&=0xfe;
delay_18B20(10);
temp=(PINA&0x01);
if(temp!=0x00)
byte|=0x80;
if(i<7)
byte=byte>>1;
delay_18B20(100);
DDRA|=0x01;
delay_18B20(5);
}
return byte;
}
void ds1820wr(uchar wdata)/*写数据*/
{
unsigned char i,j;
DDRA|=0x01;
for (j=0;j<=7;j++)
{
i=wdata&0x01;
if(i==0x01)
{
PORTA&=0xfe;
delay_18B20(10);
PORTA|=0x01;
delay_18B20(100);
}
else
{
PORTA&=0xfe;
delay_18B20(100);
PORTA|=0x01;
delay_18B20(10);
}
wdata=wdata>>1;
}
}
/************将十六进制转换成ASCII码,并送LCD显示****************/
void asc2con(unsigned char *q,unsigned char len)
{
unsigned char temp,i;
wr_com(0xc0);
for(i=0;i<len;i++)
{
temp=q[len-1-i]&0xf0;
temp=temp>>4;
wr_dat(dispcode[temp]);
temp=q[len-1-i]&0x0f;
wr_dat(dispcode[temp]);
}
}
/********************主程序***********************************/
void main()
{
unsigned char a[8],i;
lcd_init();
display(str1);
ds1820rst();
delay1ms(1);
ds1820wr(0x33);
for(i=0;i<8;i++)
{
a[i]=ds1820rd();
}
asc2con(a,8);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -