5

回答

单片机下面只走线不覆铜单片机会不会发热严重,你们一般是走线还是覆铜,使用的是4层板,有内电层

yhj416606438 2020-06-29 阅读:87

6

回答

TrueSTUDIO不更新了,是不是该换了

yucrtghvd 2020-06-28 阅读:193

8

回答

Linux命令upgrade和update区别是什么?

牛妞小小 2020-06-28 阅读:101

4

回答

想通过开发板的红外功能控制TCL空调,但是找不到红外协议资料。

Angel_YY 2020-06-28 阅读:112

8

回答

在stm32单片机中,实时操作系统需要对RAM要求高?

huihui163 2020-06-28 阅读:328

7

回答

想做一个18650的充放电路,有没有稳定易行的方案分享。

牛妞小小 2020-06-28 阅读:118

5

回答

为什么mpu6050航向角会偏移,在四轴上怎么解决偏移问题

yhj416606438 2020-06-28 阅读:120

6

回答

#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar tempnumklnum;uchar code table[]={"18B20 OKTL"};char shangxiaxian[2]={-1010};char a;sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit LCD_RW=P2^5;sbit lcdrs=P2^6;sbit lcden=P2^7;sbit Beep=P3^0;sbit led=P3^1;sbit DQ=P3^7;    /@@*液晶显示屏的延时程序*/void delay(uint z){uint xy;for(x=z;x>0;x--)    for(y=110;y>0;y--);}                 /@@*温度传感器的延时程序*/void Delay1(uint y){uint x;for( ;y>0; y--)  {   for(x=110;x>0;x--);  }}                 /@@*蜂鸣器,18B20写数据函数的延时程序*/void delay2(uint a){while(--a);}                                       /@@*温度传感器初始化函数*/void init_18B20(){DQ=1;delay2(8);DQ=0;delay2(90);DQ=1;_nop_();_nop_();delay2(100);DQ=1;}                  /@@*温度传感器写字节命令函数*/void DS18B20xiezijie(uchar date){uchar i;for(i=0;i<8;i++)  {   DQ=0;                                      //在写入一位数据之前先把总线拉低         DQ=date&0x01;                   //写入一个数据,从最低位开始写         delay2(5);                               //延时         DQ=1;                                      //将总线拉高,等待第二位数据写入         date>>=1;                              //右移一位,写入第二位数据         }}                                                          /@@*温度传感器读字节命令函数*/uchar DS18B20duzijie(){uchar idat=0;DQ=1;_nop_();for(i=0;i<8;i++)  {   DQ=0;                  //先将总线拉低         _nop_();         _nop_();         dat>>=1;         DQ=1;                                      //然后释放总线         _nop_();                         //延时一下等待数据稳定         _nop_();                                 if(DQ)         dat|=0x80;                             //读取数据,从最低位开始读取         delay2(30);                             //读取完之后等待一下,再接着读取下一个数         DQ=1;  }return dat;                        //返回所读到的温度}                                                        /@@*写温度转换命令函数*/void DS18B20ChangTemp(){init_18B20();Delay1(1);DS18B20xiezijie(0xcc);   //跳过ROM操作命令DS18B20xiezijie(0x44);   //温度转换命令}                                                          /@@*读温度命令函数*/void DS18B20ReadTempCom(){init_18B20();Delay1(1);DS18B20xiezijie(0xcc);   //跳过ROM操作命令DS18B20xiezijie(0xbe);   //发送读取温度命令}                                                          /@@*读温度函数*/int DS18B20ReadTemp(){  inttemp=0;  uchartmhtml;DS18B20ChangTemp();           //先写入转换命令DS18B20ReadTempCom();     //然后等待转换完成后发送读取温度命令tml=DS18B20duzijie();             //读取温度值共16位,先读低字节tmh=DS18B20duzijie();           //再读高字节temp=tmh;temp<<=8;temp|=tml;return temp;                              /@@*液晶屏写指令函数*/}void write_com(uchar com){lcdrs=0;lcden=0;LCD_RW=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}                                                          /@@*液晶屏写指令函数*/void write_com2(int com){lcdrs=0;LCD_RW=0;lcden=0;delay(5);P0=com;delay(5);lcden=1;delay(5);  lcden=0;P0=(com&0x0f)<<4;delay(5);lcden=1;delay(5);lcden=0;}                                                          /@@*液晶屏写数据命令函数*/void write_data(char date){lcdrs=1;LCD_RW=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;lcdrs=1;LCD_RW=0;lcden=0;P0=(date&0x0f)<<4;       //一次写入4位delay(5);lcden=1;delay(5);lcden=0;}                                                          /@@*液晶屏初始化函数*/void init(){lcden=0;write_com(0x28);write_com2(0x28);write_com2(0x0c);write_com2(0x06);write_com2(0x01);write_com2(0x80);}                                                          /@@*报警上下线处理函数*/void write_hl(uchar addchar date){uchar baishige;if(date<0){date=-date;}bai=date/100;shi=date%100/10;ge=date%100%10;write_com2(0x80+0x40+add);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);}                                                        /@@*报警上下线处理函数*/void write_hl1(uchar addchar date){uchar baishige;if(date<0){date=-date;}bai=date/100;shi=date%100/10;ge=date%100%10;write_com2(0x80+add);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);}                                                        /@@*液晶屏显示函数,显示温度值*/void Lcdxianshi(int temp){uchar sz[4]={0000};unsigned char datas[]={00000}; //定义数组float tp;if(temp<0)                //当温度值为负数{write_com2(0x80+0x40);    //写地址80表示初始地址write_data('-');          //显示负temp=temp-1; //因为读取的温度是实际温度的补码,所以减一,再取反求出原码temp=~temp;tp=temp;temp=tp*0.0625*100+0.5}else{  write_com2(0x80+0x40);  //写地址80表示初始地址  write_data('+');                    //显示正  tp=temp;  //因为数据处理有小数点,所以将温度赋给一个浮点型变量,如果温度是正,那么正数的原码就是补码本身  temp=tp*0.0625*100+0.5;  }datas[0]=temp/1000;                       //百位datas[1]=tem%10000/1000;          //十位datas[2]=temp%1000/100;       //个位datas[3]=temp%100/10;                          //小数write_com2(0x80+0x40+1);write_data('0'+datas[0]);write_com2(0x80+0x40+2);write_data('0'+datas[1]);write_com2(0x80+0x40+3);write_data('0'+datas[2]);write_com2(0x80+0x40+4);write_data('.');write_com2(0x80+0x40+5);write_data('0'+datas[3]);a=(datas[0]*100+datas[1]*10+datas[2]);  //用于温度的比较值write_hl(13shangxiaxian[1]);  //显示报警上限write_hl1(13shangxiaxian[0]);      //显示报警下限}                                                                         /@@*按键处理函数,用于设置温度报警值*/void key(){if(k1==0)  {  delay(5);  if(k1==0)  //温度报警下限加   {    shangxiaxian[0]++;          if(shangxiaxian[0]==127)          shangxiaxian[0]=126;          write_hl1(13shangxiaxian[0]);         }   }    if(k2==0)  //温度报警下限减            {              delay(5);                    if(k2==0)                    {                     shangxiaxian[0]--;                     if(shangxiaxian[0]==-56)                     shangxiaxian[0]=-55;                     write_hl1(13shangxiaxian[0]);                    }                   }          if(k3==0)  //温度报警上限加            {             delay(5);                   if(k3==0)                    {                      shangxiaxian[1]++;                      if(shangxiaxian[1]==127)                      shangxiaxian[1]=126;                      write_hl(13shangxiaxian[1]);                     }                   }                    if(k4==0)  //温度报警上限减                    {                     delay(5);                     if(k4==0)                     {                      shangxiaxian[1]--;                      if(shangxiaxian[1]==-56)                      shangxiaxian[1]=-55;                      write_hl(13shangxiaxian[1]);                     }                    }         }void main(){intb;init();led=0;for(num=0;num<11;num++)   //让液晶屏显示“18B20 OK TL”{write_data(table[num]);delay(20);  }write_com2(0x80+0x40+9);write_data('T');write_com2(0x80+0x40+10);write_data('H');while(1)  {   key();         Lcdxianshi(Ds18B20ReadTemp());         delay(100);         if(shangxiaxian[0]<0)         {           write_com2(0x80+12);           write_data('-');         }  else   {    write_com2(0x80+12);          write_data('+');         }   if(shangxiaxian[1]<0)         {         write_com2(0x80+0x40+12);         write_data('-');    }         else         {         write_com2(0x80+0x40+12);         write_data('+');         }           if(a>shangxiaxian[1])    //判断温度值与报警值的大小           {             write_com2(0x80+0x40+6);                   write_data('<');                   write_com2(0x80+0x40+7);                   write_data('L');           }          if(a>=shangxiaxian[0]&&a<=shangxiaxian[1]) //判断温度值与报警值的大小           {             write_com2(0x80+0x40+6);                   write_data('');                   write_com2(0x80+0x40+7);                   write_data('!');           }          if(a>shangxiaxian[0]||a>shangxiaxian[1])  //如果温度值在报警值之外,蜂鸣器响           {             for(b=0;b<1000;b++)                     {Beep=1;led=1;                      delay2(20);                      Beep=0;led=0;                      delay0(20);                      }                   }         }}

7d2dd1be943f13f2 2020-06-27 阅读:131

1

回答

下面这个程序我编译的时候没问题,但仿真时频率值(仿真结果在下面)无法显示出来,希望有哪位大佬能帮我解答一下。#include <AT89X51.H> unsigned char code dispbit[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};     //P2的扫描位unsigned char code dispcode[]={0x3f0x060x5b0x4f0x66                                0x6d0x7d0x070x7f0x6f0x000x40};    //数码管的字形编码unsigned char dispbuf[8]={0000001010}; //初始化显示值unsigned char temp[8];     //存放显示的数据unsigned char dispcount;   //显示计数器值unsigned char T0count;     //T0的计数器值unsigned char timecount;   //计时计数器值unsigned int geshibaiqianwanswbwqw;//声明数码管个位变量、数码管十位变量、数码管百位变量、数码管千位变量...bit flag;                  //标志位unsigned long x;           //频率值//频率计算函数void HzCal(void){  unsigned char i;   x=T0count*65536+TH0*256+TL0; //得到T0的16位计数器值  for(i=0;i<8;i++)   {     temp[i]=0;   }          i=0;          while(x/10)         //拆分           {              temp[i]=x%10;              x=x/10;              i++;            }          temp[i]=x;          for(i=0;i<6;i++)    //换算为显示数据           {              dispbuf[i]=temp[i];            }          T0count=0; }void main(void) {  TMOD=0x15;              //设置定时器工作方式  TH0=0;   TL0=0;   TH1=(65536-1000)/256;   TL1=(65536-1000)%256;       //初始化T1  TR1=1;   TR0=1;   ET0=1;   ET1=1;   EA=1;                     //开中断  while(1)    {      if(flag==1)        {          flag=0;          HzCal();   //频率计算函数         TH0=0;          TL0=0;          TR0=0;                          }     if(timecount>=1000)//判断定时器1中断次数变量是否大于等于1000,即1s。   {     TR0=1;      timecount=0;//定时器1中断次数变量置0     flag=1;//数码管初始化标志位变量置1     ge=dispcode[dispbuf[0]];//数码管个位变量     shi=dispcode[dispbuf[1]];//数码管十位变量     bai=dispcode[dispbuf[2]];//数码管百位变量     qian=dispcode[dispbuf[3]];//数码管千位变量     wan=dispcode[dispbuf[4]];         sw=dispcode[dispbuf[5]];         bw=dispcode[dispbuf[6]];         qw=dispcode[dispbuf[7]];    }         if(timecount<1000&&flag==0)//判断定时器1中断次数变量是否小于1000和数码管初始化标志位变量是否等于0    {     ge=dispcode[0];//数码管个位变量为0     shi=dispcode[0];//数码管十位变量为0     bai=dispcode[0];//数码管百位变量为0     qian=dispcode[0];//数码管千位变量为0         wan=dispcode[0];         sw=dispcode[0];         bw=dispcode[0];         qw=dispcode[0];    }           } } //定时器T0中断服务子函数void t0(void) interrupt 1 using 0 {   T0count++; } //定时器T1中断服务子函数  void t1(void) interrupt 3 using 0 {   unsigned char i;   TH1=(65536-1000)/256;   TL1=(65536-1000)%256;          //初始化T1预装值,1ms定时  timecount++;                   //扫描  P2=0xff;   switch(i)//让8位数码管以1ms间隔轮流刷新{    case 0:             P0=ge;//数码管个位数值显示           P2=0xfe;//数码管个位显示位            i++;//选位变量先赋值再加加            break;    case 1:            P0=shi;//数码管十位数值显示           P2=0xfd;//数码管十位显示位               i++;//选位变量先赋值再加加            break;    case 2:            P0=bai;//数码管百位数值显示            P2=0xfb;//数码管百位显示位            i++;//选位变量先赋值再加加            break;    case 3:            P0=qian;//数码管千位数值显示            P2=0xf7;//数码管千位变量显示位            i++;//选位变量置0           break;    case 4:            P0=wan;//数码管千位数值显示            P2=0xef;//数码管千位变量显示位            i++;//选位变量置0           break;    case 5:            P0=sw;//数码管千位数值显示            P2=0xdf;//数码管千位变量显示位            i++;//选位变量置0           break;    case 6:            P0=bw;//数码管千位数值显示            P2=0xdf;//数码管千位变量显示位            i++;//选位变量置0           break;    case 7:            P0=qw;//数码管千位数值显示            P2=0xdf;//数码管千位变量显示位            i=0;//选位变量置0           break;​    default : break;//自定义 }}

ca0043d2abcf26e0 2020-06-27 阅读:43

1

回答

用74LS90和74LS47做出60进制的计数器,工作原理是什么

9cc9bae1a7b79f87 2020-06-27 阅读:89

17

回答

学单片机之前需要学些什么作为基础?

9f14860ef29ee27d 2020-06-27 阅读:98

10

回答

下位机单片机部分已经基本开发完毕,通过USB与PC端连接。请教大家用什么软件开发上位机好些。pc端接收下位机信号,以动画的形式表现,实现控制和交互。图片正在制作过程中。程序规模中等,要求可靠性高,开发简单快速

d2e7c89b484e6e67 2020-06-27 阅读:110

3

回答

我们知道常用的python、go之类解释性的语言,其源代码通过解释器就可以执行,而且编辑非常方便。我想是否可以通过代码编辑自身来动态实现学习功能呢?常用的A编辑B,B反作用于A,这种实现方式我很熟悉,我现在需要的就是A编辑A。可以吗?

9604a3b72d92b876 2020-06-27 阅读:101

2

回答
AVR下载烧录。在线等 单片机综合应用

大佬们,Atxmega64A3U我用的片子,最近刚准备学AVR,xmega除了可以用PDI,还可以用别的方式吗,请教下大佬,帮忙普及解释下我目前不理解的几个问题:1,AVR有常见的两种烧录方式,ISP和PDI,这两种有什么区别呢,为啥还分了两种呢,度娘说法太绕了,简单直白说明一下就好2,Atxmega64A3U这个片子可以用ISP下载吗3,xmega度娘上很多说可以用串口烧录,有会的大佬说明一下吗?另外建议这样操作吗?4,目前手头有个ISP的AVR下载器,不知能否改成带PDI下载的,网上看到有人改成功过,​在线等!在线等!在线等!​​​

a2605 2020-06-27 阅读:57

6

回答

常见的高清视频传输总线有哪些,各有哪些优劣?

瑞丰年 2020-06-27 阅读:72

3

回答

GPS模块置入产品才去什需要么措施提高模块抗干扰?

乐乐大奔 2020-06-27 阅读:74

1

回答

AD快捷键如何重置,现在有冲突?

BBSKY655 2020-06-27 阅读:84

1

回答

​FPGA AS编程模式和JTAG有什么区别?​

FFT89663 2020-06-27 阅读:28

3

回答

DC-DC电路中电感平衡的准准是什么?

快乐大宝 2020-06-27 阅读:36

4

回答

数据结构的学习给点建议,推荐本书吧

细风 2020-06-27 阅读:39
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

每日任务

提问一次
100IC币
回答一次
30IC币

问题达人换一批

本月问答IC币兑换

排名
用户名
问答积分
可兑换IC币
1
740
15000
2
522
10000
3
452
10000
4
442
10000
5
398
8000
6
282
6000
7
200
6000
8
172
4000
9
140
4000
10
126
4000
11
120
4000
12
78
2000
13
68
2000
15
48
1000
16
44
1000
17
44
1000
18
40
1000
19
32
1000
20
26
0
21
22
0
22
22
0
24
20
0
25
20
0
28
18
0
29
12
0
30
10
0
< 123 >