Protues仿真赛 仿真模块和程序代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Protues仿真赛

DA模块(DAC0832)

实例程序(实现0到255八位二进制的模拟电压转换)#include "reg51.h"

#define uchar unsigned char

#define uint unsigned int

#define out P1

sbitdac_cs=P2^0;

sbitdac_wr=P2^1;

void main()

{

uchar i=0,k=100;

while(1)

{

out=i;

dac_cs=0;

dac_wr=0;

dac_cs=1;

dac_wr=1;

i++;

if(i>255)

i=0;

while(--k);

}

}

ADC0804模块与红外测距传感器GP2D12

实例程序(将红外测距显示的距离化成P1口的八位二进制)

uint adc0804()

//adc0804读取数据并送入P1口,read=1991/(read+3)-7为距离传感器的计算公式

{

wr = 0;

read = P1;

delayms(10);

wr=1;

delayms(10);

read=1991/(read+3)-7;

return read;

}

LCD1602模块初始化

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit LCD_RS=P2^0; //lcd1602数据、命令选择端sbit LCD_EN=P2^2; //lcd1602使能线

void LCD_init(void) //LCD初始化

{

LCD_EN=0;

write_cmd(0x38);

write_cmd(0x0c);

write_cmd(0x06);

write_cmd(0x01);

}

void write_cmd(uchar com) //写命令到LCD

{

LCD_RS=0;

P0=com;

delayms(5);

LCD_EN=1;

delayms(5);

LCD_EN=0;

}

void write_data(uchardat) //写显示数据到LCD {

LCD_RS=1;

P0=dat;

delayms(5);

LCD_EN=1;

delayms(5);

LCD_EN=0;

}

void LCD_pos(ucharx,uchar y) //显示地址

{ ucharpos;

switch(x)

{

case 0:

x=0x80;break;

case 1:

x=0xc0;break;

}

pos=x+y;

write_cmd(pos);

}

DS18B20温度传感器程序

/*--------------精确延时5us子程序---------*/ void delay5(uchar n)

{

do

{

_nop_();

_nop_();

_nop_();

n--;

}

while(n);

}

/*--------------初始化函数--------------------*/ void init_ds18b20(void)

{

uchar x=0;

DQ =0;

delay5(120);

DQ =1;

delay5(16);

delay5(80);

}

/*--------------读取一字节函数----------------*/ ucharreadbyte(void)

{

uchar i=0;

uchar date=0;

for (i=8;i>0;i--)

{

DQ =0;

delay5(1);

DQ =1; //15微秒内拉释放总线

date>>=1;

if(DQ)

date|=0x80;

delay5(11);

}

return(date);

}

/*--------------写一字节函数------------------*/ voidwritebyte(uchardat)

{

uchar i=0;

for(i=8;i>0;i--)

{

DQ =0;

DQ =dat&0x01;//写"1" 在15微秒内拉低

delay5(12); //写"0" 拉低60微秒

DQ = 1;

dat>>=1;

delay5(5);

}

}

/*--------------读取温度函数------------------*/ ucharretemp(void)

{

uchara,b,tt;

uint t;

init_ds18b20();

writebyte(0xCC);

writebyte(0x44);

init_ds18b20();

writebyte(0xCC);

writebyte(0xBE);

a=readbyte();

b=readbyte();

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

return(tt);

}

定时器简单仿真与程序

(控制P1^0口输出10Hz到2KHz的可调方波)

相关文档
最新文档