Protues仿真赛 仿真模块和程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的可调方波)