⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yupengdeng.c

📁 大家在过收费站时
💻 C
字号:
/*********************************************************************************************/

#include<AT89X51.H>     // 包含头文件
#include <absacc.h>
#include <stdio.h>
#include <intrins.h>
#define reset() {WDT=0x1e;WDT=0xe1;}              //看门狗复位宏定义

/* 与编译器无关的数据类型定义 */
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量
typedef signed   char      int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                // 有符号32位整型变量
typedef float              fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)
/********************************************************************************************/
uint32 deda; //0                                    //1ms计时单元
uint32  sec;  //0                                    //计时秒
uint8  min;   //0                                    //计时分
/* 定义位变量 */
sbit adccs=P2^3;
sbit adcclk=P2^4;
sbit adcdo=P2^5;
sbit pwm=P2^6;
sbit LED=P2^0;
sfr WDT=0xa6;
bit flag;  //0                                      //5min中断采集数据标志
static uint8 percent;                               // 用于保存占空比中输出低电平的时间份额,总共10份
uint8  ch;

/**********************************函数声明表************************************************/

void init_timer0();                              //定时器T0初始化
void init_timer1();                              //定时器T1初始化
/********************************************************/
/*                     A/D采集                          */
/********************************************************/
void delay1(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++)
{};
}
void adcck(void)     //时钟函数
{
adcclk=1;delay1(2);
adcclk=0;delay1(2);
}
unsigned char readadc(void)     //读出TLC0831转换数据函数
{
unsigned char i;
//uchar ch;
adccs=0;
adcck();ch=0;
for(;adcdo==1;)adcck();
for(i=0;i<8;i++)
{
adcck();
ch=(ch<<1)|adcdo;
}
adccs=1;
return(ch);      //返回值,即转换后的数据
}
/***********************************延时子程序 kx1ms******************************************/
void delay (uint32 k) 
{uint32 i,j;
 for(i=0;i<k;i++)
  {for(j=0;j<120;j++)
   {;}
   reset();
  }
}
/***********************************定时器T0初始化********************************************/
void init_timer0()                  //1ms
{TMOD=0x11;
TH0=0xfc;
TH0=0x66;
TR0=1;ET0=1;
}

/***********************************定时器T1初始化********************************************/
void init_timer1()                  //0.5ms
{//TOMD=0x11;
TH0=0xff;
TH0=0x33;
TR1=1;ET1=1;
}
/*********************************************************************************************/
/*************1ms定时中断服务子函数T0*****************/
void time0(void) interrupt 1  using 1
{
TH0=0xfc;
TL0=0x66;
deda++;
if (deda>=1000){sec++;deda=0;}
//if (sec>=60)   {min++; sec=0;}
//if (min>=5)    {min=0;flag=1;}
if (sec>10)  
 {
	//flag=1;
	  sec=0;
     readadc();
     if      ( ch>=0&&ch<=15)   percent=10;   
     else if (ch>15&&ch<=45)    percent=9; 
     
     else if (ch>45&&ch<=75)    percent=8;
	 
     else if (ch>75&&ch<100)    percent=7;
      
     else if (ch>100&&ch<=150)  percent=6; 
      
     else if (ch>150&&ch<200)   percent=3; 
      
     else if (ch>=200&&ch<250)  percent=2;

	  else if (ch==255)          percent=5;
	}
 reset();
 //flag=0;
}
/*************0.5ms定时中断服务子函数T1*****************/
void time1(void) interrupt 3  using 2
{
static uint8 circle;                      //tt用来保存当前时间在1秒中的位置
TH1=0xff;
TL1=0x33;
TF1=0;
circle++;
if(circle==10)
 {
 circle=0;
 }
if(circle<=percent)                              // 加入该句的目的是避免灭灯时发生闪烁
 pwm=0;
else
 pwm=1;
}
/*******************************************主函数**********************************************/
void main ()
{
 init_timer0();                              //定时器T0初始化
 init_timer1();                              //定时器T1初始化
 EA=1;
 percent=5; 
 while (1)
  {
   
  }
}     
      



 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -