#include"stc15.h"
#include"ds1302.h"
#include"iic.h"
#include"intrins.h"
sbit TX=P1^0;
sbit RX=P1^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c2=P4^2;
sbit c1=P4^4;
sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
unsigned int temp=0; //温度
unsigned int juli=0; //距离
unsigned int dat1=0; //光敏电阻的电压
unsigned int kai=0;
unsigned int jiemian=0;
unsigned int jilu=0;
unsigned int moshi=0;
unsigned int jishu=0;
unsigned int ju_zj=0;
unsigned int ju_max=0;
unsigned int ju_min=0;
unsigned int ju_cun=0;
unsigned int zhi=0;
unsigned int num=0; //计算平均值的计数
unsigned int shican=2;
unsigned int shican1=2;
unsigned int xitong=0;
unsigned int jucan=20;
unsigned int num1=0; //调整时间参数是计数使用
unsigned int shi1=0; //计算秒处定时的时间
unsigned int liang=0;
unsigned int num2=0;
unsigned int jucan1=20;
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code tab5[]={0x50,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char tab1[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char tab2[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char tab3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char tab4[]={0xc6,0x8e};
void shujujilu();
void delay(unsigned int t)
{
while(t--);
}
void hc573(unsigned int n)
{
switch(n)
{
case 4:P2=(P2&0x1f)|0x80;break;
case 5:P2=(P2&0x1f)|0xa0;break;
case 6:P2=(P2&0x1f)|0xc0;break;
case 7:P2=(P2&0x1f)|0xe0;break;
}
}
void hc138(unsigned int addr,unsigned char dat)
{
hc573(6);
P0=0x01<<addr;
hc573(7);
P0=dat;
delay(1000);
P0=0xff;
}
void close() //关闭外设
{
hc573(5);
P0=0x00;
hc573(4);
P0=0xff;
}
void chushihua()
{
unsigned int i=0;
Write_Ds1302_Byte(0x8e,0x00);
for(i=0;i<7;i++)
{
Write_Ds1302_Byte(tab1[i],tab3[i]);
}
Write_Ds1302_Byte(0x8e,0x80);
}
void dushijian()
{
unsigned int i=0;
for(i=0;i<7;i++)
{
tab3[i]=Read_Ds1302_Byte(tab2[i]);
}
}
void Delay12us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 33;
while (--i);
}
void fasong()
{
unsigned int i=0;
for(i=0;i<8;i++)
{
TX=1;
Delay12us();
TX=0;
Delay12us();
}
}
void ceju()
{
unsigned int time=0;
TMOD&=0xf0;
TH0=0x00;
TL0=0x00;
fasong();
TR0=1;
while((RX==1)&&(TF0==0));
TR0=0;
if(TF0==0)
{
time=TH0;
time=time<<8;
time=time|TL0;
juli=(unsigned int)time*0.017;
}
else
{
TF0=0;
juli=0;
}
}
void PCF8951ADC1() //光敏电阻
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x41);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
dat1=IIC_RecByte();
IIC_Stop();
if(dat1<70)
{
liang=1; //控制L6;
}
else
{
liang=0; //控制L6;
}
}
void PCF8951DAC1(unsigned char dat) //DAC输出
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x41);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
unsigned int bian=0;
void dianyashuchu()
{
if(juli<=10)
{
PCF8951DAC1(51);
}
else if((juli>10)&&(juli<80))
{
bian=51+((juli-10)*28)/10;
PCF8951DAC1(bian);
}
else if(juli>=80)
{
PCF8951DAC1(252);
}
}
unsigned int chu=0;
unsigned int chu1=0;
unsigned int ju_zj1=0;
void shujujilu() //最大值最小值中间值的判断
{
if(chu==1)
{
ju_cun=juli;
if(ju_cun>ju_max)
{
ju_max=ju_cun;
}
else if(ju_cun<ju_min)
{
ju_min=ju_cun;
chu=1;
}
if(chu1==0)
{
ju_zj1=(ju_max+ju_min)/2;
ju_zj=ju_zj1;
chu1=1;
num++;
}
else if(chu1==1)
{
ju_zj=(((ju_zj*num)+ju_cun)*10)/(num+1);
num++;
if(num>=65536)
num=0;
}
}
else if(chu==0)
{
ju_max=ju_min=ju_zj=juli;
chu=1;
num++;
}
}
void cejupanduan()
{
if(moshi==0)
{
TR1=0;
if(dat1<70)
{
if(kai==1) //为了保证只测量一次,故加此变量
{
kai=0;
ceju();
shujujilu();
}
}
else if(dat1>=60)
{
kai=1;
}
}
else if(moshi==1)
{
shi1=(tab3[0]/16)*10+(tab3[0]%16);
if(shi1%shican==0)
{
ceju();
shujujilu();
}
}
}
void tiaoshijian()
{
if(num1==0)
{
num1=1;shican1=3;
}
else if(num1==1)
{
num1=2;shican1=5;
}
else if(num1==2)
{
num1=3;shican1=7;
}
else if(num1==3)
{
num1=4;shican1=9;
}
else if(num1==4)
{
num1=0;shican1=2;
}
}
void LEDwork()
{
if((xitong==0)&&(jiemian==0))
{
hc573(4);
L1=0;L2=1;L3=1;
}
else if((xitong==0)&&(jiemian==1))
{
hc573(4);
L1=1;L2=0;L3=1;
}
else if((xitong==0)&&(jiemian==2))
{
hc573(4);
L1=1;L2=1;L3=0;
}
if(moshi==0)
{
hc573(4);
L4=0;
}
else if(moshi==1)
{
hc573(4);
L4=1;
}
if(liang==1)
{
hc573(4);
L6=0;
}
else if(liang==0)
{
hc573(4);
L6=1;
}
if(moshi==1)
{
if((juli>(jucan-5))&&(juli<jucan+5))
{
num2++;
if(num2==3)
{
hc573(4);
L5=0;
}
else
{
hc573(4);
L5=1;
}
}
}
}
void xianshishijian() //显示时间
{
hc138(0,tab[tab3[2]/16]);
hc138(1,tab[tab3[2]%16]);
hc138(2,0xbf);
hc138(3,tab[tab3[1]/16]);
hc138(4,tab[tab3[1]%16]);
hc138(5,0xbf);
hc138(6,tab[tab3[0]/16]);
hc138(7,tab[tab3[0]%16]);
}
void xianshijuli() //显示距离
{
hc138(0,0xc7);
hc138(1,tab4[moshi]); //0xc6是c
if(juli>=100)
hc138(5,tab[juli/100]);
if(juli>=10)
hc138(6,tab[juli%100/10]);
if(juli>=0)
hc138(7,tab[juli%10]);
}
void jilumax() //显示最大值
{
hc138(0,0x89);
hc138(1,0xfe);
if(ju_max>=100)
hc138(5,tab[ju_max/100]);
if(ju_max>=10)
hc138(6,tab[ju_max%100/10]);
if(ju_max>=0)
hc138(7,tab[ju_max%10]);
}
void jilumin() //显示最小值
{
hc138(0,0x89);
hc138(1,0xf7);
if(ju_min>=100)
hc138(5,tab[ju_min/100]);
if(ju_min>=10)
hc138(6,tab[ju_min%100/10]);
if(ju_min>=0)
hc138(7,tab[ju_min%10]);
}
void jiluzhongjian() //显示中间值
{
hc138(0,0x89);
hc138(1,0xbf);
if(ju_zj>=1000)
hc138(4,tab[ju_zj/1000]);
if(ju_zj>=100)
hc138(5,tab[ju_zj%1000/100]);
if(ju_zj>=10)
hc138(6,tab5[ju_zj%1000%100/10]);
if(ju_zj>=0)
hc138(7,tab[ju_zj%10]);
}
//参数显示
void shijiancanshu()
{
hc138(0,0x8c);
hc138(1,tab[1]);
hc138(6,tab[shican1/10]);
hc138(7,tab[shican1%10]);
}
void julicanshu()
{
hc138(0,0x8c);
hc138(1,tab[2]);
hc138(6,tab[jucan1/10]);
hc138(7,tab[jucan1%10]);
}
void xianshihanshu()
{
if(xitong==0)
{
if(jiemian==0)
xianshishijian();
else if(jiemian==1)
xianshijuli();
else if(jiemian==2)
{
if(zhi==0)
jilumax();
else if(zhi==1)
jiluzhongjian();
else if(zhi==2)
jilumin();
}
}
else if(xitong==1)
{
if(jiemian==0)
shijiancanshu();
else if(jiemian==1)
julicanshu();
}
}
void key2() //系统切换
{
r4=0;
r3=c1=c2=1;
if(c1==0)
{
delay(500);
if(c1==0)
{
while(c1==0)
xianshihanshu();
jiemian=0;
if(xitong==1)
{
shican=shican1;
jucan=jucan1;
}
xitong++;
if(xitong>=2)
xitong=0;
while(c1==0);
}
}
}
void key() //界面切换
{
r3=0;
r4=c1=c2=1;
if(c1==0)
{
delay(500);
if(c1==0)
{
while(c1==0)
xianshihanshu();
if(xitong==0)
{
jiemian++;
if(jiemian>=3)
jiemian=0;
}
else if(xitong==1)
{
jiemian++;
if(jiemian>=2)
jiemian=0;
}
while(c1==0);
}
}
}
void key1() //模式和(最大,最小,中间值)的选择
{
r4=0;
r3=c1=c2=1;
if(c2==0)
{
delay(500);
if(c2==0)
{
while(c2==0)
xianshihanshu();
if((jiemian==1)&&(xitong==0))
{
moshi++;
if(moshi>=2)
moshi=0;
}
else if((jiemian==2)&&(xitong==0))
{
zhi++;
if(zhi>=3)
zhi=0;
}
while(c2==0);
}
}
}
void key3() //参数的改变
{
r
51混子
- 粉丝: 12
- 资源: 4
最新资源
- 西门子S7-1200PLC与KTP700触摸屏协同控制松下伺服电机:运动控制、位置显示与以太网通讯,西门子S7-1200PLC和KTP700触摸屏控制松下伺服电机运动控制程序4 程序简介:可以实现伺服
- 三相光伏逆变器研发蓝图解析:从源头解析理图PCB源代码,洞察10Kw光伏并网技术的奥秘,三相10Kw光伏并网逆变器 包含全套理图 PCB 源代码 ,核心关键词:三相10Kw光伏并网逆变器; 全套原理图
- Delphi 12 控件之ReportBuilder-Enterprise-22.05-for-Delphi-12.rar
- 基于LabVIEW程序架构的项目快速搭建指南:从状态机到JKI框架的学习与实践,labview程序架构 有了架构可以快速搭建你的项目,状态机学习,JKI框架学习 ,核心关键词:LabVIEW程序架构
- MTK芯片支持多款全网通模块设计资料:包含PCB与SCH设计方案及生产量产资料与软件代码分享,MTK,4G全网通模块设计资料,芯片支持6735,6753, 6737,8735,8783,六模26频(可
- Delphi 12 控件之FastReport Client-Server-VCL-EnterpriseManual-en.pdf
- 默纳克全套液晶服务器程序大全:万能液晶程序、刷外呼协议等,含主板等刷机软件及教程,默纳克万能液晶服务器MDKE3程序 默纳克万能液晶服务器全套程序,包含万能液晶程序、刷外呼协议程序、升级底座程序、部分
- Delphi 12 控件之MMX-Setup-15-1-13-2639.exe
- Simulink主动悬架控制策略模型:涵盖天棚与地棚控制、模糊PID与LQG控制等多元化优化算法应用,simulink主动悬架控制策略模型 有天棚控制 地棚控制 定制悬架系统模糊控制 lqg控
- Hypermesh与Dyna软件在雪佛兰Silverrado与Honda Accord碰撞仿真与实验对标分析报告,Hypermesh+dyna整车碰撞模型( 仿真+试验对标)-加计算分析报告 国外专业
- 基于FPGA的DS18B20多功能温度显示系统:实时更新数码管显示,按键查看历史温度与存储功能,超温报警提醒,基于FPGA的 DS18B20多功能温度显示 实现功能: 1.实时温度显示在数码管上,更新
- 威纶通触摸屏与台达变频器Modbus通讯:直连操作指南与实用程序分享,威纶通触摸屏与台达变频器modbus通讯 威纶通与台达变频器直接相连,进行modbus通讯,程序可以帮你学会触摸屏直连的modbu
- 三菱FX3U与欧姆龙E5EZ系列温控器RTU通讯示例:实现温度监控与报警功能,三菱FX3U rtu方式通讯欧姆龙E5EZ-R3MT程序示例 需要硬件:三菱FX3U plc,FX3U-485BD通讯板
- FPGA W5500三合一驱动:UDP、TCP客户端与服务器功能集成,8个SOCKET高速稳定,verilog纯逻辑实现,FPGA W5500 3合一 驱动 UDP、TCP客户端、TCP服务端三合一
- Delphi 12 控件之精典源码Delphi131某医院HIS管理系统.zip源代码
- 西门子S7-200PLC与昆仑通态MCGS触摸屏控制伺服步进电机程序实例:正反转、绝对与相对定位及原点复位功能,附带库文件与操作手册,伺服步进控制程序西门子200PLC和昆仑通泰MCGS触摸屏控制伺服
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页