锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

电赛—简易直流稳压电源(源代码)

时间:2024-05-11 15:07:44

小弟学艺不精!请多多包涵!!!分享下源代码有很多可以调用的函数,,,,谢谢 A 0832与DAC0832处理数据。
/*****************************************************************
*************作者:张通 *****************************************
*************信息工程学院*****************************************
*************简易直流稳压代码*************************************
******************************************************************/
#include"reg52.h"
#include
#define uchar unsigned char
#define uint unsigned int
#define WR WR2
#define DAT P0
sbit K1=P3^1;
sbit K2=P3^2;
sbit K3=P3^3;
sbit CS=P2^5; //片选信号
sbit SID=P2^2;//数据信号
sbit SCLK=P2^1;//时钟信号
sbit R =P2^2;//复位信号
sbit CH = P2^0;//并行、串行选择信号
sbit clk0832=P3^6;
sbit DI0832=P3^4;
sbit DO0832=P3^5;
sbit ADCS=P3^7;
sbit WR=P2^6;
bit _Int=0;
bit state;
bit k=0;
bit m=0;
bit q=0;
bit fushu=0;
uint Ch0value,Ch1value;
uint x;
uchar ADdat;
uchar result;
uchar kyreg;
uchar go;
uint DAdat;
uchar hh;
uchar temp;//存放功能状态
void hzkdis(unsigned char code *s);
void delayms(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
void delay(uint t)
{
uint i,j;
for(i=0; i for(j=0; j<10; j++);
}
/**********
*读数值
***********/
uchar keyread()
{
uchar kysta=1;//按键标志,kysta=1无按键
while(kysta)//定P3口低三位
{
P3=0X0e;
kyreg=P3;
if(kyreg!=0x0e)
{
delay(20);
kyreg=P3;
if(kyreg!=0x0e)
{
if(kyreg==0x0c)return 11; //第一个键
if(kyreg==0x0a)return 12; //第二个键
if(kyreg==0x06)return 13; //第三个键
} }
while(kyreg!=0x0c)//键复位
{
P3=0X0e;
kyreg=P3;
}
}
}
uchar keyread2()
{
if(K2==0) //KEY键实现数据增加
{
//WR2=1;
//delay(50);
//WR2=0;
if(K2==0) //第二个键按下
delay(50); //P1口数值加1
P0=go;
go++;
while(!K2);
}
}
uchar keyread3()
{
if(K3==0)//KEY3键实现数据减少
{
//WR2=1;
//delay(50);
//WR2=0;
if(K3==0);//第三个键按下
delay(50);
P0=go;
go--;//P1口数值减1
while(!K3);
}
}
/***********************
*ADC0832数据处理函数
***********************/
uchar ADC0832(uchar channel)
{uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
DI0832=1; //DI为1
_nop_(); //延时两个指令周期
_nop_();
ADCS=0; //拉低cs,选通;确定数据输入开始

clk0832=1; //时钟信号为高
_nop_();
_nop_();
clk0832=0; //时钟信号为低,此处为第一个下降沿
_nop_();
_nop_();
clk0832=1; //时钟信号为高
DI0832=channel&0x1;// 这句?
_nop_(); _nop_();
clk0832=0; //时钟信号为低,此处为第二个下降沿
_nop_();
_nop_();
clk0832=1; //时钟信号为高
DI0832=(channel>>1)&0x1; // ?
_nop_();
_nop_();
clk0832=0; //时钟信号为低,此处为第三个下降沿
DI0832=1; //DI为1
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=DO0832;//这句?
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7) dat|=DO0832;
}
for(i=0;i<8;i++)
{ j=0;
j=j|DO0832;
clk0832=1;
_nop_();
_nop_();
clk0832=0;//形成一次时钟脉冲
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1; //拉高CS端
clk0832=0;//拉低CLK端
DO0832=1;//拉高数据端回到初始状态
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
/**********
*DAC送数
**********/
void seDAC(uchar DAdat)
{
WR=1;
_nop_();
_nop_();
DAT=DAdat;
WR=0;
_nop_();
_nop_();
WR=1; }
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int h;
for(h=0; h<8; h++)
{
if((zdata << h) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
} /********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
} /********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
} /********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
write_com(0x03);
delay(50);

} /********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
void Test()
{
write_com(0x03);
delay(50);
write_com(0x80);
hzkdis("简易 ");
//write_com(0x90);
//hzkdis("V=00.0v A=00.0a ");
write_com(0x98);
hzkdis("张通 干顺 颜炜");;
// write_com(0x98);
//hzkdis(" 12级电子18班 ");
}
void writeNumber(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("简易直流稳压电源");
write_com(addr+rank);
write_data('V');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('v');
// write_data(' ');
// write_data(' ');
// write_data('A');
// write_data('=');
// write_data(y/100+'0');
// write_data(y%100/10+'0');
// write_data('.');
// write_data(y%10+'0');
// write_data('a'); }
void writeNumber1(uchar row,uchar rank,uint s)
{
uchar addr;
switch(row)
{
case 0:addr=0x80;break;
case 1:addr=0x90;break;
case 2:addr=0x88;break;
case 3:addr=0x98;break;
}
write_com(0x80);
hzkdis("简易直流稳压电源");
write_com(addr+rank);
write_data('A');
write_data('=');
write_data(s/10000+'0');
write_data(s%10000/1000+'0');
write_data(s%1000/100+'0');
write_data(s%100/10+'0');
write_data(s%10+'0');
write_data('m');
write_data('a');
} //void display()
//{
//write
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章