资源简介
基于51单片机的0·5V可调直流电源Proteus仿真,欢迎大家下载
代码片段和文件信息
#include
#include
#include “timer.h“
#include “global.h“
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
#define vout 1
#define vset 0
#define vmode
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
sbit DACSCLK = P2^3;
sbit DACCS = P2^4;
sbit DACDIN = P2^5;
sbit CS = P1^0;
sbit CLK = P1^1;
sbit DIO = P1^2;
sbit KEY1 = P3^6;
sbit KEY2 = P3^7;
#ifdef vmode
uchar Display_Buffer[] = “00.00V “;
uchar code Line1[] = “Current Voltage:“;
#else
uchar Display_Buffer[] = “ “;
uchar code Line1[] = “Current Speed: “;
#endif
extern uint speed;
void Delayms(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
uchar Busy_Check()
{
uchar LCD_Status;
RS = 0;
RW = 1;
EN = 1;
Delayms(1);
LCD_Status = P0;
EN = 0;
return LCD_Status;
}
void Write_LCD_Command(uchar cmd)
{
while((Busy_Check()&0x80)==0x80);
RS = 0;
RW = 0;
EN = 0;
P0 = cmd;
EN = 1;
Delayms(1);
EN = 0;
}
void Write_LCD_Data(uchar dat)
{
while((Busy_Check()&0x80)==0x80);
RS = 1;
RW = 0;
EN = 0;
P0 = dat;
EN = 1;
Delayms(1);
EN = 0;
}
void Initialize_LCD()
{
Write_LCD_Command(0x38);
Delayms(1);
Write_LCD_Command(0x01);
Delayms(1);
Write_LCD_Command(0x06);
Delayms(1);
Write_LCD_Command(0x0c);
Delayms(1);
}
void ShowString(uchar xuchar yuchar *str)
{
uchar i = 0;
if(y == 0)
Write_LCD_Command(0x80 | x);
if(y == 1)
Write_LCD_Command(0xc0 | x);
for(i=0;i<16;i++)
{
Write_LCD_Data(str[i]);
}
}
uchar Get_AD_Result(uchar ch)
{
uchar idat1=0dat2=0;
CS = 0;
CLK = 0;
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0;
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0;
if(ch)
DIO = 1;
else
DIO = 0;
_nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0;
DIO = 1; _nop_(); _nop_();
for(i=0;i<8;i++)
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
if(DIO) dat1 |=0x80>>i;
}
for(i=0;i<8;i++)
{
if(DIO) dat2 |=0x01< CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
}
CS = 1;
if (dat1 == dat2)
return dat1;
else
return 0x00;
}
void Set_DAC(uint dacvalue)
{
uchar i;
uint dat;
dat = dacvalue;
dat &= 0x03ff;
DACCS = 0;
DACSCLK = 0;
for(i=0;i<12;i++)
{
if(dat & 0x0200)
DACDIN = 1;
else
DACDIN = 0;
DACSCLK = 1;
dat <<= 1;
DACSCLK = 0;
}
DACCS = 1;
}
void main()
{
uchar B;
uint dv;
Initialize_LCD();
InitTimer();
Delayms(10);
v = 0x0100;
StartTimer(0);
B = 0;
while(1)
{
d = Get_AD_Result(vset);
d &=0x00FF;
Set_DAC(d*4);
d = Get_AD_Result(vout);
d &=0x00FF;
d = d*1000.0/255;
#ifdef vmode
if(d/1000)
Display_Buffer[0]=d/1000+‘0‘;
else
Display_Buffer[0]=‘ ‘;
Display_Buffer[1]=d/100%10+‘0‘;
Display_Buffer[3]=d/10%10+‘0‘;
Display_Buffer[4]=d%10+‘0‘;
#else
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-04-18 20:24 可调直流电源Proteus仿真\
目录 0 2015-04-18 20:24 可调直流电源Proteus仿真\code\
文件 14563 2015-04-18 20:20 可调直流电源Proteus仿真\code\18
文件 3295 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.c
文件 4846 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.hex
文件 50 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.lnp
文件 8529 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.LST
文件 17340 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.M51
文件 11714 2015-04-18 20:20 可调直流电源Proteus仿真\code\18.OBJ
文件 982 2009-08-12 17:07 可调直流电源Proteus仿真\code\18.opt.bak
文件 380 2015-04-18 20:24 可调直流电源Proteus仿真\code\18.plg
文件 2134 2009-08-12 17:07 可调直流电源Proteus仿真\code\18.Uv2.bak
文件 57720 2015-04-18 20:24 可调直流电源Proteus仿真\code\18.uvopt
文件 13554 2014-03-31 21:35 可调直流电源Proteus仿真\code\18.uvproj
文件 57724 2014-05-12 21:23 可调直流电源Proteus仿真\code\18_uvopt.bak
文件 13226 2014-03-30 21:48 可调直流电源Proteus仿真\code\18_uvproj.bak
文件 54 2013-11-27 18:41 可调直流电源Proteus仿真\code\global.h
文件 785 2014-03-31 21:21 可调直流电源Proteus仿真\code\timer.c
文件 108 2014-03-31 20:49 可调直流电源Proteus仿真\code\timer.h
文件 2918 2014-04-04 16:51 可调直流电源Proteus仿真\code\timer.LST
文件 3560 2014-04-04 16:51 可调直流电源Proteus仿真\code\timer.OBJ
文件 125126 2014-04-18 17:45 可调直流电源Proteus仿真\Last Loaded 直流电源.DBK
文件 123438 2015-04-18 20:23 可调直流电源Proteus仿真\直流电源.DSN
文件 768 2015-04-18 20:24 可调直流电源Proteus仿真\直流电源.PWI
- 上一篇:图书管理系统数据
- 下一篇:数字信号处理代码资源
评论
共有 条评论