感悟网 导航

求救:用单片机89C52程序设计 实现固定的时间间隔周期循环地开关

作者&投稿:戈废 (若有异议请与网页底部的电邮联系)
时间周期的时间循环~

举个简单的例子,我们熟知的春夏秋冬就是一个典型的时间循环。经历了春天,夏天就回到来,夏天过去就是秋天,秋天过来了就是冬天,冬天过后春天又回到大地。由于时间循环具有圆的性质。

#include #define uint unsigned int;#define uchar unsigned char;void delay (uint x){uint y;uchar z;for(y=x;y>0;y--){for(x=110;x>0;x--);}}void main(){while(1){P1^0=0;delay(500); P1^0=1;delay(1000);}}//虽然给你程序了,但还是希望你自己动手,这样才能提高。//我也是从你那时学起的,知道那种渴望的滋味。特给你此段程序,希望以后自食其力。 //关于电路很简单了,自己画吧。

/* T0定时器控制脉冲 1mS~4095mS可调(对应DAC输入0~2.5V)*/

#include<reg51.h> 

unsigned int TC0=0;  //周期计数

unsigned int RefLed=0; //LED刷新周期

unsigned int Value1=0; //设定时间值

bit Enb=0;    //输出允许值

bit Enb1=0;

unsigned char code Led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  

sbit DOUT=P1^0;   //ADC串行数据

sbit SLCK=P1^1;   //ADC时钟

sbit CS=P1^2;   //ADC控制

sbit P13=P1^3;   //1:1输出

sbit P14=P1^4;   //2分频输出

sbit P15=P1^5;   //1ms输出

sbit P17=P1^7;   //允许输出控制端 按下一次开,再按一次关

/*============延时子程序===================*/

void delay(unsigned int cnt) 

 while(--cnt); 

}

/*==========输出脉冲时间显示===============*/

void Dsp(unsigned int Vol) 

 if (RefLed < 40) //显示灯刷新部分

 ++RefLed;

 else

 RefLed=0; 

 switch(RefLed)

 {

 case 0:

  P2=0x01;

  P3=~Led[Vol/1000];

  break;

 case 10:

  P2=0x02;

  P3=~Led[(Vol%1000)/100];

  break;

 case 20:

  P2=0x04;

  P3=~Led[(Vol%100)/10];

   break; 

 case 30: 

  P2=0x08;

  P3=~Led[Vol%10];

  break;    //显示灯刷新完成

 }   

}   

/*==============主程序====================*/

void main()

{

 unsigned int i =0;

 unsigned int Value=0;

   TMOD=0x1;    //定时器0 工作于方式 1 

   TH0=0xFC;  //初始定时值1ms;65536-1000=64536=0xFC18H

   TL0=0x18;

  IE=0x82;  //允许中断

   TR0=1;      //开定时器0

 

 CS=1;

 SLCK=0; 

   while(1)

 {

  Value=0;

  CS=0;

  SLCK=0; 

  for (i=0;i<12;i++)  //读取Max1240的12位电压值

  {

   SLCK=1;

   delay (1);

   SLCK=0; 

   delay (1);

   if (DOUT==1)

   Value=(Value<<1)|0x0001;

   else

   Value = Value<<1;

   delay (1);

  } 

  CS=1; 

  delay (1);

  Value1=Value;  //把电压值赋予脉冲周期

  Dsp(Value1);  //显示输出脉冲周期

  if ((P17==0) && (Enb==1))

  {Enb1=!Enb1;}

  Enb = P17;

 }

}

/*============T0 中断函数=================*/

void Timer0() interrupt 1

{

   unsigned int k=0;

   

   TH0=0xFC;

   TL0=0x18;   

 k=P13;

  P15=!P15;

 if(++TC0 > Value1)    //当计数满Value次时为Value*mS

   {

  TC0=0;      //计数复位

   if (Enb1==1)

  P13=!P13;  //P13输出

  else 

  P13=0;

 }     

 if((k == 0) && (P13 ==1))

 {  if (Enb1==1)

  P14=!P14;  //P14端口2分频输出

  else 

  P14=0;

 } 

}

已经用仿真软件Proteus 7 Professional 7.7sp2调试通过,通过电位器调节1~4095ms方波。 

并附上仿真图。如需程序请留下邮箱。不足之处请多多指教。



ntinue的作用是,结束本次循环,进行下一次呵呵

#include <reg51.h>
#define uint unsigned int;
#define uchar unsigned char;
void delay (uint x)
{
uint y;
uchar z;
for(y=x;y>0;y--)
{
for(x=110;x>0;x--);
}
}
void main()
{
while(1)
{
P1^0=0;
delay(500);
P1^0=1;
delay(1000);
}
}
//虽然给你程序了,但还是希望你自己动手,这样才能提高。
//我也是从你那时学起的,知道那种渴望的滋味。特给你此段程序,希望以后自食其力。
//关于电路很简单了,自己画吧。

我来帮帮你!

好说。其实和很简单,可以联系我。去我百度空间看看实力。然后找我做,

《用89C52单片机控制32个LED流水灯的C语言程序,》
答:/***32灯流水——火柴天堂作品-20130520***/ /***52单片机,12MHz晶振,P0-P3 接32颗LED,低电平驱动***/ include"REG52.h"//包含52头文件 define TRUE 1//定义布尔量'1':真 define FALSE 0//定义布尔量'0':假 define uchar unsigned char//定义 无符号字符型数据 简称 define uint ...

《用stc 89C52单片机实现键盘控制28BYJ-48步进电机的启停 加减速,正反转...》
答:include<reg52.h> define uchar unsigned signed sbit jia_key=P3^6;sbit jian_key=P3^7;sbit zf_key=P3^5;bit flag=0;uchar codetable[]={0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};uchar num,qidong,PWM,table_begin;void delay(uchar 1){ uchar j,k;for(j=i;j>0;j--)fo...

《求STC 89C52单片机程序》
答:include<reg52.h> sbit LED1 = P1^1; //LED1 sbit LED2 = P2^1; //LED2 sbit Key1 = P3^6; //按键 unsigned char Flag = 0; //标志 / 延时1MS子函数 / void Delay_1ms(unsigned int Time){ unsigned int x,y;for(x = Time; x > 0; x--)for(y = 120; y...

《设89C52单片机Fosc=12MHz。试编写一段程序,对定时器T1初始化,使之工作...》
答:楼上用的是查询法,我来个中断函数的 呵呵 include<reg52.h> sbit a0=P1^1;//端口定义 int count=0;//计时变量初始化 /***T1中断服务函数***/ void T0Int() interrupt 3 using 0 // { count++;//200us 加一次 if(count==100)//一百次之后,取反输出端口 { count=0;//清零...

《...初始值为最低 89c52单片机做 帮写个程序吧》
答:50Hz的方波相当于20ms周期,用定时器来做12M晶振下定时计数值为20000,占空比每1%为200,所以可以做如下参考程序:include<reg52.h> define uchar unsigned char define uint unsigned int sbit pulse=P1^0;sbit key1=P1^1;sbit key2=P1^2;uint zkb;uchar flag;void delay(uint x){ uint i,j;...

《怎样用单片机STC 89C52实现pwm控制占空比的输出波形,求程序!能详细备注...》
答:JNB P1.2,K2CHECK ;扫描KEY2,如果按下KEY2,跳转到KEY2处理程序 SJMP KSCAN K1CHECK:JB P1.1,K1HANDLE ;去抖动,如果按下KEY1,跳转到KEY1处理程序 SJMP K1CHECK K1HANDLE:MOV A,PWMH CJNE A,PWM,K1H0 ;判断是否到达上边界 SJMP KSCAN ;是,则不进行任何操作 K1H0:MOV A,PWMH INC A CJ...

《89C52单片机发出警笛声程序》
答:include <reg51.h>#include <intrins.h> sbit SPK = P3^4; unsigned char frq; void delayms(unsigned char ms) // 延时子程序{ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }} void timer0() interrupt 1 using 1{ TH0 = 0xfe;...

《用89C52单片机做设计,需要用EEPROM扩展程序存储器吗?》
答:一般不需要的,这主要看你的程序复杂程度,也就是说,程序编译后有多大,超过8K后就不得不扩展程序存储器了

《急求 基于89c52单片机,ds18b20温度传感器的温度控制c程序!!!》
答:;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒 ;可以将检测到的温度直接显示到AT89C51的两个数码管上 ;显示温度00到99度,很准确无需校正!ORG 0000H ;单片机内存分配申明!TEMPER_L EQU 29H;用于保存读出温度的低8位 TEMPER_H EQU 28H;用于保存读出温度的高8位 FLAG1 EQU ...

《怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序?》
答:include <REG52.H> include <INTRINS.H> //本例采用89C52, 晶振为11.0592MHZ //关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;//所以拿出谱子, 试探编吧!sbit Beep = P1^5 ;unsigned char n=0; //n为节拍常数...

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网