基于单片机的CO2浓度检测与显示系统设计 联系客服

发布时间 : 星期四 文章基于单片机的CO2浓度检测与显示系统设计更新完毕开始阅读3ed59ad2b04e852458fb770bf78a6529647d355f

西安建筑科技大学课程设计(论文)

{

IO = ACC0;

CLK = 1; //下降沿写入数据// CLK = 0;

ACC = ACC >> 1; } }

/*----------------读出字节子函数-----------*/ OutputByte(void) //上升沿读出数据//

/*----------------函数:设置初始时间-------------------*/ void SetTime(unsigned char *pSecDa) {

WriteTo1302(0x8e,0x00); // 控制命令,WP=0,写操作 // for(i =7;i>0;i--) {

WriteTo1302(Addr,*pSecDa); pSecDa++; Addr +=2; }

WriteTo1302(0x8e,0x80); // 控制命令,WP=1,写保护 // } /*----------------读取时间-------------------*/ void GetTime(void) {

for (i=0;i<7;i++)

{ Curtime[i] = ReadFrom1302(Addr); Addr += 2; }

sec = Curtime[0]; }

第 33 页 共 39页

西安建筑科技大学课程设计(论文)

/*----------------初始化定时器I0子函数-------------------*/ void Init_T0(void) {

TMOD=0x01; //定时器T0,工作模式1// TH0=0x3c; //50ms// }

/*----------------函数:产生闪烁信号子函数------------------------*/ void T0_flash(void) interrupt 1 // 中断程序,产生时钟秒信号 // /*----------------函数:时间闪烁子函数----------------------------*/ /*----------------功能:选择确定闪烁位等待调整--------- -----*/ void FlashKey(void) //闪烁子函数// void Add(void) //调时子函数// void Init_Clock(void) //时钟初始化子函数// void Refresh(void) //刷新显示子函数// void Add(void) //调时子函数// {

if(P1_2==0) //按P0_2键进行时间调整// {

while(P1_2==0) Refresh();

if(KT==1) //检验可调标志位KT// { hms++; switch(n)

{case 1:year=hms;break; //根据n不同,返回给不同的位:n=1 -> 返回给小时位// }

if((sec&0x0f)==0x0a) {sec&=0xf0; sec+=0x10;} // 如果秒位满十,向十秒位进一

第 34 页 共 39页

西安建筑科技大学课程设计(论文)

if(day==8) {day=1;} // 如果星期满七,重新从星期一开始计 //

if((sec&0xf0)==0x60) {sec&=0x0f;} // 如果十秒位满六,清零 // if(((date&0xf0)==0x30)&((date&0x0f)==0x02)) {date&=0x00;}

if(((month&0xf0)==0x10)&((month&0x0f)==0x03)) {month&=0x00;} if((year&0xf0)==0xa0) {year&=0x0f;}

Curtime[0] = sec; Curtime[1] = min;

SetTime(&Curtime[0]); // 将调整过后的时间值写入// }

/ *--------------------时钟初始化子函数----------------------------*/ void Init_Clock(void) {

K1=1; K2=1; K3=1; K4=1; K5=1; K6=1; K7=1; KT=0; n=0; Init_T0(); }

/*-------------------------刷新显示子函数--------------------------*/ void Refresh(void) {

GetTime(); CS1=1;CS2=0; if(K6)

{ sz_disp16(5,40,1,shuzi[sec&0x0f]); // 秒位 // sz_disp16(5,32,1,shuzi[sec>>4]); } // 十秒位 // else

{ hz_disp16(5,32,1,kongbai2); } // 秒位 十秒位 // if(K5)

{ sz_disp16(5,8,1,shuzi[min&0x0f]); // 分钟位 //

第 35 页 共 39页

西安建筑科技大学课程设计(论文)

sz_disp16(5,0,1,shuzi[min>>4]); } // 十分位 // else

{ hz_disp16(5,0,1,kongbai2); }

/*----------------------状态判断于------------------------*/ void State(void) {CS1=1;CS2=0; if(KT==1)

{ hz_disp16(1,32,1,tiao);

hz_disp16(1,48,1,shi2);}

else

{ hz_disp16(1,32,1,kongbai2);

hz_disp16(1,48,1,kongbai2); }

/*-------------------------显示程序--------------------------*/ /*--------------------------位定义--------------------------*/ sbit RST = P2^0; // 复位端 // sbit E = P2^1; // 使能端 // #define Disp_On 0x3f // 显示开指令 // #define Disp_Off 0x3e // 显示关指令 // #define Col_Add 0x40 // 定位到第0列指令 // #define Page_Add 0xb8 // 定位到第0页指令 //

#define Start_Line 0xc0 // 定位从DDROM中的第0行开始往屏幕上显示 unsigned char code measurearray[] unsigned char code storearray[]

/*----------------------写命令到LED---------------*/ void write_command(unsigned char cmdcode) { RS = 0; RW = 0; P0 = cmdcode;

第 36 页 共 39页