永发信息网

求C51单片机程序的注释,(数控直流稳压电源的设计)

答案:4  悬赏:50  手机版
解决时间 2021-03-02 22:48
对于此程序,请哪位高手帮帮小弟注释一下,感激不尽!!(回答后另有加分)

#include<reg51.h>
#include<absacc.h>
#define dac0832 XBYTE[0x7fff]
unsigned char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
float s;
sbit ALE=P3^0;
sbit START=P3^1;
sbit EOC=P3^2;
sbit OE=P3^3;
sbit SHCP=P2^0;
sbit DS=P2^1;
sbit STCP=P2^2;
sbit P11=P3^5;
sbit P12=P3^7;
sbit clk=P2^6;
unsigned char j,k,m,n,i,a;
unsigned int b;
void delay(unsigned char t)
{ while(t--);
}
void display()
{

j=0x01;
for(i=0;i<8;i++)
{ if((shu[m]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P12=0;
P11=1;
STCP=0;
STCP=1;
delay(200);
j=0x01;
for(i=0;i<8;i++)
{ if((shu[n]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P11=0;
P12=1;
STCP=0;
STCP=1;
delay(200);
}
void main()
{
P2=0x87;
TMOD=0x20;
TH1=0x06;
TL1=0x06;
EA=1;
ET1=1;
TR1=1;
while(1)
{
ALE=1;
ALE=0;
START=1;
START=0;
while(EOC==0);
OE=1;
k=P1;
a=P1;
b=a*6;
m=b/1000;
n=b%1000/100;

dac0832=k;

display();

}
}
void time() interrupt 3
{
clk=!clk;
因为我是新手,希望高手可以多注释些,如果全部注释,答案正确,本人愿意再奉送50(我一共就一百多分,要是多的话, 愿送更多)!!!
最佳答案
本人估计,你是用proteus仿真做的吧,因为DAC0832的工作脉冲你是靠IO口取反来实现的,以下是我对程序的注释,由于你没给出原理图,有不合理之处在所难勉.
有些地方我认为没必要说的就不细说,不明再问

#include<reg51.h>
#include<absacc.h> //头文件,可使用其中定义的宏来访问绝对地址
#define dac0832 XBYTE[0x7fff] //DAC位置定义,跟据实际原理图而定
unsigned char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管码值表
float s;

sbit ALE=P3^0; //DAC0832 ALE脚工作脉冲位定义
sbit START=P3^1; //DAC0832 START位定义
sbit EOC=P3^2; //转换结束标志位
sbit OE=P3^3; //输出允许位
sbit SHCP=P2^0; //数码管驱动芯片(如595)位定义
sbit DS=P2^1; //同上
sbit STCP=P2^2; //同上
sbit P11=P3^5;
sbit P12=P3^7;
sbit clk=P2^6; //DAC0832 工作脉冲


unsigned char j,k,m,n,i,a;
unsigned int b;
void delay(unsigned char t)
{ while(t--);
}

void display() //静态数码管的显示
{

j=0x01;
for(i=0;i<8;i++)
{ if((shu[m]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P12=0;
P11=1;
STCP=0;
STCP=1;
delay(200);
j=0x01;
for(i=0;i<8;i++)
{ if((shu[n]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P11=0;
P12=1;
STCP=0;
STCP=1;
delay(200);
}

void main()
{
P2=0x87;
/////////定时器1初始化////////////////
TMOD=0x20;
TH1=0x06;
TL1=0x06;
EA=1;
ET1=1;
TR1=1;

while(1)
{
//DAC0832地址锁存脉冲
ALE=1;
ALE=0;
//DAC0832 开始转换脉冲
START=1;
START=0;

while(EOC==0); //等待转换完毕
OE=1; //开始读
k=P1; //读数据
a=P1; //读数据
b=a*6;
m=b/1000; //取千位数
n=b%1000/100; //取百位数

dac0832=k;

display(); //数码管显示

}
}
void time() interrupt 3 //DAC0932脉冲
{
clk=!clk; //位取反
全部回答
//程序和硬件是密切相关的,不同的硬件结构,其软件是完全不一样的,由于不了解该系统的硬件结构,只能从字面上猜测着解释了,希望对你有用。 #include<reg51.h> #include<absacc.h> #define dac0832 XBYTE[0x7fff] unsigned char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管译码数组 float s; sbit ALE=P3^0;//硬件接口定义,后面类同 sbit START=P3^1; sbit EOC=P3^2; sbit OE=P3^3; sbit SHCP=P2^0; sbit DS=P2^1; sbit STCP=P2^2; sbit P11=P3^5; sbit P12=P3^7; sbit clk=P2^6; unsigned char j,k,m,n,i,a; unsigned int b; void delay(unsigned char t) { while(t--); } void display()//用串转接口芯片驱动数码管 { j=0x01;//通过串行方式发送一个字节 for(i=0;i<8;i++) { if((shu[m]&j)==0)//发送数字m的段码,准备显示数字m { DS=0;} else {DS=1;} SHCP=1; SHCP=0; j<<=1; } P12=0;//接通对应数码管电源,显示数字m P11=1; STCP=0; STCP=1; delay(200);//延时显示 j=0x01;//和前面类似,显示数字n for(i=0;i<8;i++) { if((shu[n]&j)==0) { DS=0;} else {DS=1;} SHCP=1; SHCP=0; j<<=1; } P11=0; P12=1; STCP=0; STCP=1; delay(200); } void main() { P2=0x87; TMOD=0x20;//初始化定时器,以便产生时钟信号clk TH1=0x06; TL1=0x06; EA=1; ET1=1; TR1=1; while(1) { ALE=1; ALE=0; START=1;//启动AD转换 START=0; while(EOC==0);//等待AD转换结束 OE=1; k=P1;//读取转换结果 a=P1; b=a*6;//标度变换 m=b/1000;//计算出千位m,百位n n=b%1000/100; dac0832=k;//向外部地址空间输出数据 display(); } } void time() interrupt 3 { clk=!clk;
display()函数是串行口转并行口芯片驱动7段LED数码管显示 应该是74164或74595等芯片 DAC0832就不用解释了,只要硬件连接正常就行啦 输出就只要写 dac0832=k; k取值在0-255之间
display()函数是串行口转并行口芯片驱动7段LED数码管显示 应该是74164或74595等芯片 DAC0832就不用解释了,只要硬件连接正常就行啦 输出就只要写 dac0832=k; k取值在0-255之间 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
崇左市体育训练馆跆拳道馆我想知道这个在什么
房贷会随利率变化吗
袜子加工一般是加工什么的
识图填空(1)A是鼻腔,它入的气体有清洁温暖
千里共良宵姚科专场所选的歌曲
五个字的情侣游戏名字。蕴含诗意最好。如果满
苹果铜陵旗舰店地址在哪,我要去那里办事
厂家返利如何核算
打羽毛球时.总是不回用腰的力量.有什么方法
老公梦见我生了个男孩,我梦见老公抱了个男孩
学习数控车床就业前景好不好
老婆经常和她的老同学联系,总有几个男同学会
【我爱他轰轰烈烈最疯狂】...的肩膀如今各自
王者荣耀为什么安卓和苹果不是一个区
老毛门业地址在什么地方,想过去办事
推荐资讯
PS里做完的东西在印刷的时候为了不被裁掉某些
东山宾馆2号楼地址有知道的么?有点事想过去
氯化钠 氯化锰 氯化钠哪一种是固体,
湖北润成投资有限公司这个地址在什么地方,我
JOJO 里承太郎应该不可能打赢迪奥的 他没有波
农村给人刷内墙漆摔伤,脾切除,他是按平方算
男人勃起时是什么感受
白菜可以炒什么
游戏手柄什么牌子好
腰果的产地主要有哪些地方
罗加的意思
窝铺中心幼儿园怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?