6

回答

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

yucrtghvd 2020-06-28 阅读:188

8

回答

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

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

4

回答

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

Angel_YY 2020-06-28 阅读:112

8

回答

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

huihui163 2020-06-28 阅读:323

7

回答

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

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

5

回答

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

yhj416606438 2020-06-28 阅读:119

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 阅读:88

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 阅读:56

6

回答

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

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

3

回答

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

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

1

回答

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

BBSKY655 2020-06-27 阅读:83

1

回答

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

FFT89663 2020-06-27 阅读:28

3

回答

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

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

4

回答

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

细风 2020-06-27 阅读:39

0

回答

电源完整性的仿真核心问题是什么?

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

每日任务

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

问题达人换一批

本月问答IC币兑换

排名
用户名
问答积分
可兑换IC币
1
710
15000
2
522
10000
3
384
8000
4
384
8000
5
368
8000
6
278
6000
7
178
4000
8
168
4000
9
140
4000
10
126
4000
11
120
4000
12
74
2000
13
68
2000
15
46
1000
16
44
1000
17
40
1000
18
32
1000
19
26
0
21
22
0
22
22
0
24
20
0
25
20
0
28
18
0
29
10
0
< 123 >