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
#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