基于STC15单片机的智能流量计(6)

2019-03-03 15:30

if(i==20 ) { i=0;

miao++; yx++;

if(miao==g) {miao=0; b=0;} } }

void dingshichu() { TMOD = 0x10; //设置定时器模式 TL1 = 0xB0; //设置定时初值 TH1 = 0x3C; //设置定时初值 ET1 = 1; //清除TF1标志 TR1 = 1; //定时器1开始计时 EA=1; }

//休眠时间

设置子程序

//******************************************************************************/

#ifndef __Set_H #define __Set_H #include \#include \sbit k2=P4^5; //设置模式选择 sbit k3=P4^4; //加数

unsigned int c=0; //设置模式标记位

unsigned int d=0; //瞬时流量小数点前两位 unsigned int e=0; //瞬时流量小数点后一位 unsigned int f=0; //unsigned int g; //休眠时间 unsigned int shunxiaoshu=0; //瞬时小数

unsigned int leixiaoshu=0; //累计小数

unsigned int xiumianshijian=1;

void shezhianjian()

{ if(k2 == 0 & b==1) //低电平有效 {

delay_ms(80); //检测到按键 if(k2 == 0) {

24

while(k2); //直到松开按键 c++;

if (c!=0){

while(++f==1) {OLED_Clear();} } }}}

void jiashuanjian()

{ if(k3 == 0 & b==1) //低电平有效 {

delay_ms(80); //检测到按键 if(k3 == 0)

{ while(k3); //直到松开按键 if(c==1)

{ if(++shunxiaoshu==999)

{shunxiaoshu=0; } }

else if(c==2) { if(++leixiaoshu==999) {leixiaoshu=0; } }

else if(c==3) { if(++xiumianshijian==10) {xiumianshijian=1;} } }}}

void shezhixianshi() { miao=0;

OLED_ShowCHinese(30,0,11);//设 OLED_ShowCHinese(48,0,12);//置 OLED_ShowCHinese(66,0,13);//模 OLED_ShowCHinese(84,0,14);//式 if (c==1){ f=0; jiashuanjian(); OLED_ShowCHinese(0,4,19);//仪 OLED_ShowCHinese(16,4,20);//表 OLED_ShowCHinese(31,4,21);//常 OLED_ShowCHinese(47,4,22);//数 两个字符间加18

OLED_ShowString(60,4,\: 两列之间加2

25

////

OLED_ShowNum(68,4,shunxiaoshu/100,1,16); OLED_ShowNum(76,4,shunxiaoshu/10,1,16); OLED_ShowNum(84,4,shunxiaoshu,1,16); OLED_ShowCHinese(92,4,27);//个 OLED_ShowString(107,4,\ } else if (c==2){ f=0; jiashuanjian(); OLED_ShowCHinese(0,4,23);//累 OLED_ShowCHinese(15,4,24);//计 OLED_ShowCHinese(30,4,25);//流 OLED_ShowCHinese(45,4,26);//量 OLED_ShowString(60,4,\:

OLED_ShowNum(68,4,leixiaoshu/100,1,16); OLED_ShowNum(76,4,leixiaoshu/10,1,16); OLED_ShowNum(84,4,leixiaoshu,1,16); } else if (c==3){ f=0;

jiashuanjian() ; OLED_ShowCHinese(0,4,15);//休 OLED_ShowCHinese(18,4,16);//眠 OLED_ShowCHinese(36,4,17);//时 OLED_ShowCHinese(54,4,18);//间 OLED_ShowString(72,4,\:

OLED_ShowNum(90,4,xiumianshijian,1,16); OLED_ShowString(102,4,\ } else if(c==4){c=0;} }

AD子程序

//******************************************************************************/

#ifndef __AD_H #define __AD_H

#include //REG51中不包括相关特殊寄存器,需要另外声明

#include //函数运算头文件

#define uint unsigned int //宏定义变量uint为无符号整型数据(0-65535)

#define uchar unsigned char //宏定义变量uchar为无符号字符型数据(0-255)

#define ADC_POWER 0x80 //ADC power control dit (宏定义ADC电源控制

26

位)1000 0000

#define ADC_FLAG 0x10 //ADC complete flag (宏定义ADC完成标志位) 0001 0000

#define ADC_START 0x08 //ADC start control dit (宏定义ADC启动控制位)0000 1000

#define ADC_SPEEDLL 0x00 //420 clocks (宏定义420时钟)速度控制 0000 0000

#define ADC_SPEEDL 0x20 //280 clocks (宏定义280时钟)速度控制 0001 0000

#define ADC_SPEEDH 0x40 //140 clocks (宏定义140时钟)速度控制 0010 0000

#define ADC_SPEEDHH 0x60 //070 clocks (宏定义70时钟)速度控制 0011 0000

void InitADC(); //初始化ADC子程序声明 uchar zhADC(uchar ch); //ADC 转换子程序声明 void delayms(uint k); //1ms延时子程序声明

void SR(); //执行AD转换结果子程序声明

unsigned char j;

/*-------------------------------------------------- 主函数(无返回值,无参数)

---------------------------------------------------*/ void AD() {

P1M1 = 0x01; //P1.0高阻 P1.1强推挽:0000 0001 ADC输入高阻、继电器强上拉

P1M0 = 0x02; //P1.0高阻 P1.1强推挽:0000 0010 ADC输入高阻、继电器强上拉

zhADC(5);

InitADC(); //Init ADC sfr (初始化ADC SFR) }

/*---------------------------- 初始化ADC

-----------------------------*/ void InitADC() {

P1ASF=0x20; //设置P1.0端口作为模拟输入

ADC_RES=0; //Clear previous result (清除以前的结果)

ADC_CONTR=ADC_POWER|ADC_SPEEDLL; //开启ACD电源、设置转换速度

delayms(1); //上电延时 }

27

/*----------------------------

Get ADC Result(获取ADC结果) -----------------------------*/

uchar zhADC(uchar ch) //zhADC(获取ADC结果) {

ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START; //启动转换 _nop_(); //4个时钟延时 _nop_(); _nop_(); _nop_();

while(!(ADC_CONTR & ADC_FLAG)); //wait complete flag(等待完成标志)

ADC_CONTR &=~ADC_FLAG; //Close ADC(关闭ADC) // return ADC_RES; //Return ADC result(返回ADC结果)

j=(ADC_RES*5*100)/256; }

/*----------------------------

1ms延时子程序(12M晶振) -----------------------------*/

void delayms(uint k) {

uint i,j; for(i=k;i>0;i--)

for(j=747;j>0;j--); }

OLED显示子程序

//******************************************************************************/

#include \

#include \ void delay_ms(unsigned int ms) { unsigned int a; while(ms) { a=1800; while(a--); ms--; } return; }

#if OLED_MODE==1

28


基于STC15单片机的智能流量计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中作文 绝知此事要躬行

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: