173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机51数码管仿真

htxw 2023-03-13 资讯中心 16 ℃

51单片机+DS18B20 数码管显示温度仿真的时候显示乱码是怎么回事

目测显示部分的函数存在问题。。。你的程序没全呀。。。。

#includereg51.h

#includeintrins.h

#define uchar unsigned char

#define uint unsigned int

sbit D18B20=P3^7; //温度传感器信号线

uint temp=0;float f_temp=0;

bit flag=0;

void TempDelay (unsigned char idata us) //延时函数,精确延时时间由软件仿真可得。0调用时用时12us

{

while(us--);

}

/************************************************************

*Function:18B20初始化

*parameter:

*Return:

*Modify:

*************************************************************/

void Init18b20 (void)

{

D18B20=1;

_nop_();

D18B20=0;

TempDelay(90); //delay 551 uS//80

D18B20=1;

TempDelay(14); //delay 95 uS//14

if(D18B20==0)

flag = 1; //detect 1820 success!

else

flag = 0; //detect 1820 fail!

TempDelay(25); //20 delay 164us

D18B20 = 1;

}

/************************************************************

*Function:向18B20写入一个字节

*parameter:

*Return:

*Modify:

*************************************************************/

void WriteByte (unsigned char idata wr) //单字节写入

{

unsigned char idata i;

for (i=0;i8;i++)

{

D18B20 = 0;

TempDelay(0); //delay 12us

D18B20=wr0x01;

TempDelay(3); //delay 30 uS //5

_nop_();

_nop_();

D18B20=1;

wr = 1;

TempDelay(3);

}

}

/************************************************************

*Function:读18B20的一个字节

*parameter:

*Return:

*Modify:

*************************************************************/

unsigned char ReadByte (void) //读取单字节

{

unsigned char idata i,u=0;

for(i=0;i8;i++)

{

u = 1; //5us的时间

D18B20 = 0;

_nop_();

_nop_();

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

D18B20 = 1;

}

return(u);

}

void tempchange(void) //DS18B20 开始获取温度并转换

{

Init18b20();

WriteByte(0xcc); // 写跳过读ROM指令

WriteByte(0x44); // 写温度转换指令

}

uint get_temp() //读取寄存器中存储的温度数据

{

uchar a=0,b=0;

Init18b20();

WriteByte(0xcc);

WriteByte(0xbe);

a=ReadByte(); //读低8位

b=ReadByte(); //读高8位

Init18b20();

temp=b;

temp=8; //两个字节组合为1个字

temp=temp|a;

f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625°

temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入

f_temp=f_temp+0.05;

return temp; //temp是整型

}

以上是读取数据部分。。。。。最后读取的数据为整数

为什么数码管显示计可以仿真出来但是在51单片机上显示不出来

数码管的公共端没有连接。51单片机数码管显示不了是因为数码管的公共端没有连接。数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。

51单片机 按键转数码管?

51单片机 按键转数码管,仿真例程 参考

#includereg51.h

#define uchar unsigned char

uchar temp;

int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsigned char ledx[8];

bit  s0,s1;

void delay(uchar z)

{

uchar i,j;

for(i=0;i120;i++)

for(j=0;jz;j++);

}

void scan()   //要是按键了,扫描键盘编码值

{

P1=0xF0;

delay(1);

temp=P1;

switch(temp)

  {

  case 0xe0: key1=0;

  break;

  case 0xd0: key1=1;

  break;

  case 0xb0: key1=2;

  break;

  case 0x70: key1=3;

  break;

  }

P1=0x0f;

delay(1);

temp=P1;

switch(temp)

  {

  case 0x0E: key=key1+0;

  break;

  case 0x0D: key=key1+4;

  break;

  case 0x0B: key=key1+8;

  break;

  case 0x07: key=key1+12;

  break;

  default : key=-1;

  }

if((key1+1)(key+1)) disbuf=key;

}

void ejjc()  //判断是否按键

{

P1=0xF0;

if(P1!=0xF0) { scan();s0=1;}

else { s0=0; s1=1;}

}

void main()

{

uchar i;

while(1)

  {

  ejjc();

  if(s0==1  s1==1)

    {

    s0=0;s1=0;

    for(i=0;i8;i++)

      { ledx[i]=ledx[i+1]; ledx[8]=disbuf; }

    }

  P0=0xff;

  P2=LED7Code[ledx[0]];

  P0=0xfe;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[1]];

  P0=0xfd;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[2]];

  P0=0xfb;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[3]];

  P0=0xf7;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[4]];

  P0=0xef;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[5]];

  P0=0xdf;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[6]];

  P0=0xbf;

  delay(5);

  P0=0xff;

  P2=LED7Code[ledx[7]];

  P0=0x7f;

  delay(5);

  }

}

51单片机仿真软件中数码管叫什么

数码管(其实就是LED)如果是共阳极,那么单片机可以驱动显示。如果是共阴极,单片机则不能驱动显示(或者灯光微弱),因为单片机的IO口无法提供足够高的电流,此时需要外部电路器件提供一个大电流驱动的芯片。

51单片机介绍

51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。

设备上,一般是建议购买一个仿真器,例如,的双功能下载线就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。

通过实验,这样才可以进行实际的,全面的学习。日后在工作上,仿真器也大有用处。还有,一般光有仿真器是不行,还得有一个实际的电路,即学习板,如图,即为,单片机最小系统。

学习板以强大的接口为主,单片机的学习分两方面,一方面是单片机的原理及内部结构,另一方面是单片机的接口技术。这些都是需要平时多积累,多动手,多思考,这样才能学好单片机技术。

单片机51数码管仿真的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:单片机51数码管仿真

<