⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shiyan.c

📁 电机的不同转动轻快
💻 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 + -