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

作者&投稿:麻顷 (若有异议请与网页底部的电邮联系)
数控直流稳压电源 用AT89C51单片机写的程序=。= 加注释~

#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; //table和table2一个为共阴一个为共阳
uchar data tab[2]; //number值的个位和十位存放
uchar ws[2]={0,0};
uchar code table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7};
uchar code tablewei[]={0x0e,0x0d}; //0,1对应的段选信号
sbit dula=P1^5;
sbit dawr=P2^6;//DA写数据段
sbit dacs=P2^7;//DA始能段
uchar num1,f,f1,f2,f3,f4,f5,f6,keynum;
//f为数字键标志位;f1为DA转换标志位;f2,f4分别为+,-0.1标志位;f3为清零标志位
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uint number)//显示LED
{

uchar i,j;
tab[0]=number%10; //计算number值(00~99)的个位
tab[1]=number/10; //计算number值(00~99)的十位
for(i=0,j=0;i<2;i++,j++)
{

dula=1; //开片选信号
P2=tablewei[j]; //段位显示
if(i==0) //共阴或共阳选择
P0=table[tab[i]]; //段位值显示
else //共阴或共阳选择
P0=table2[tab[i]]; //段位值显示
dula=0; //关片选信号
delay(5); //延时以确保能显示清晰
}
}

单片机的数控的
找要求等
那好

本人估计,你是用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;
/*******************DAC0832控制位的定义,视实际原理图而定*************/
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之间


设单片机系统如何编写一个完整的C51程序使P1.6和P1?
三、C51编程: 1、C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。 2、对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对...

c51编程开发步骤?
改变程序编辑器界面的方法,点击【view】---选择【options】--- 点击【colors&fonts】标签---选择【editorcfiles】第六步:编译文件 点击【project】---选择【optionsRebuildalltargetfiles】第七步:下载hex文件到单片机 1、打开烧录软件(STC-ISP软件)2、选择单片机型号 3、选择要下载的hex文件 4、...

C51程序以何种文件类型保存? 什么是c51
1、C51程序保存的文件类型为ASM,保存汇编后缀为.ASM 。2、C51是和计算机硬件相结合的一种编程技术。3、C51单片机本书是以目前最为流行的8051系列单片机为主体,同时使用c程序设计语言来进行描述的。全书共分为四部分内容:单片机基础知识、c语言程序设计、单片机入门基础实例、单片机高级应用实例。以理论与...

用c语言编写c51单片机源程序后缀是?
C语言编写的源程序,后缀是.c。头文件的后缀是.h。

C51语言有哪些特点,作为单片机设计语言,它与汇编语言相比有什么不同,优...
C51是一种高级编程语言,特点如下:1. 结构化:C51语言支持结构化编,允许程序员使用函数、模块、结构体等方式组织代码,使得程序更加易于理解和维护。2. 高效:C51语言生成的汇编代码与手写的汇编代码相比非常接近,因此可以在不降低效率的情况下提高开发效率。3. 可移植性:C51语言是一种标准化的语言,...

C51单片机程序
16位计数器 TMOD=0x01 1 0 方式2 自动重装8位计数器 TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 PCON = 0x00;PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器 WDCON = 0x00;清狗 SCON = 0x50;SCON1 = 0x40;串口控制寄存器 ...

C51单片机程序的理解
void delay()是延时函数 程序是用移位实现led轮流亮的 0x80就是二进制的10000000b,取反就是01111111b,m>>1是右移一位,灯在低电平亮,循环八次,就这样

请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写...
define DOU 1818\/\/按键消抖时间sbit led_1=P2^0;sbit led_2=P2^1;sbit led_3=P2^2;sbit led_4=P2^3;sbit led_5=P2^4;sbit dp=P1^7;sbit an_mod=P2^5;sbit an_movright=P2^6;sbit an_up=P2^7;unsigned char code tab[]={0x90,0xd7,0xa2,0x86,0xc5,0x8c,0x88,0xd6,...

编写一个完整的单片机C51程序
sbit led=P1^0; \/\/单片机管脚位声明 void main(){ TMOD=0x01; \/\/定时器TO工作在方式1 TH0=(65536-5000)\/256; \/\/装初值,12M晶振 1为1us; 5000为5000us=5ms;TL0=(65536-5000)%256;EA =1; \/\/开总中断 ET0=1; \/\/开定时器TO中断 TR0=1; \/\/启动定时器 P1=0;...

单片机C51源程序。谁能看懂的吗?帮我分析一下,明天就要交报告啦。谢谢...
void display() \/\/显示函数 { u8 i;for(i=0;i<6;i++){ P2=wela[i];\/\/选择哪个数码管有效 P0=dula[disbuff[i]];\/\/数码管显示的数字 delay(3);} } void Change() \/\/转换函数 { disbuff[0]=FerTmp\/100000;\/\/提取fertmp的十万位的数字 disbuff[1]=(FerTmp%100000)\/10000;\/\/提取...

达日县13350668156: 求C51单片机程序的注释,(数控直流稳压电源的设计) -
水姜阿乐: 本人估计,你是用proteus仿真做的吧,因为DAC0832的工作脉冲你是靠IO口取反来实现的,以下是我对程序的注释,由于你没给出原理图,有不合理之处在所难勉.有些地方我认为没必要说的就不细说,不明再问#include<reg51.h>#include<...

达日县13350668156: 求C51单片机控制sca60c倾角传感器的程序,最好有注释~~~~ -
水姜阿乐: 支持一下感觉挺不错的

达日县13350668156: c51单片机静态显示程序,求详细注解 -
水姜阿乐: void timer0() interrupt 1 ;采用T0定时器,中断级别1 { TH0=(65536-50000)/256; TH0装如初始值 TL0=(65536-50000)%256;TL0装入初始值

达日县13350668156: C语言C51单片机花样流水灯程序分析注释 -
水姜阿乐: 和你说一句关键的(别告我你整个程序一句都看不懂):P1=0xfe;0xfe是十六进制表示的数,二进制就是1111 1110,通过你的程序和相关注释可以看出,硬件上你有8个led灯连接P1口,且这些led是低电平亮.P1=0xfe(1111 1110)也就是表示七...

达日县13350668156: 谁给个6数码管的c51单片机动态扫描程序详细程序及每句的注释 -
水姜阿乐: x0: mov r1,#10 ;0-9循环倒数 mov r0,#0h x1: mov dptr,#0200h mov p0,#00111111b ;6个数码管显示 mov a,r0 movc a,@a+dptr ;查表 mov p1,a ;查表后的数码管编码给单片机p1口 inc r0 ;查表后自加准备查下一个编码mov r2,#250 ; 延时 y1: ...

达日县13350668156: 跪求基于51单片机的数控直流电源程序 -
水姜阿乐: 楼主的设计需要两个方面,硬件方面需要提供低纹波电源,注意加滤波;软件方面,不过是单片机控制DAC并输出在数码管显示. 硬件太简单就说了.软件编程上,由于按键只有两个,想简化设计,可以用按键+单稳去抖动;由于DAC只需要8位,不论采用串行或者并行接口都没问题,若实用角度考虑,最好是用PWM实现DAC,这只需要定时器产生脉冲调宽信号,经过IO口输出后,用两级LC滤波,然后用运放+三极管放大即可;数码管显示最简单是利用40脚的51多余的引脚,直接接两位共阳LCD数码管,显示两位即可.这样做,编程那个也很简单. 注意,LZ的51一定要实用内部带FLASH ROM的型号,例如89S51/52,或者更好的STC产品.

达日县13350668156: 求单片机代码注释 -
水姜阿乐: 象这一段和紧接下面两段很好理解 ,分别是按键调秒分时 { if(P0_0==0) //判断按键有无按下 {for(i=10;i>0;i--) //延时 消抖 for(j=248;j>0;j--);if(P0_0==0) //再次判断按键有无按下{second++; //秒增加1 if(second==60) //够60秒回0{second=0; ...

达日县13350668156: 求大神为我的单片机代码注释下 -
水姜阿乐: 先说下,你的程序格式写的太占用空间了,而且看着也不够整洁 已经帮你都注释了,格式也做了调整,部分没有调整,方便添加注释 /***************************************************************************/ #include#define uchar unsigned char #define...

达日县13350668156: 用MSC - 51单片机P1口驱动8只LED,低电平亮.使P1.0驱动的LED闪烁,程序如下,求每行程序注释... -
水姜阿乐: 改为50hz将delay替换成以下 DELAY: MOV R6,#0D7H DL0: MOV R5,#2DH DJNZ R5,$ DJNZ R6,DL0 NOP NOP RET

达日县13350668156: 注释一下 单片机程序 -
水姜阿乐: #include #define uchar unsigned char #define uint unsigned int uchar code table[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8个数码管的位选择信号表 uchar code display[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //1-8的共阴字码表 sbit wei=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网