|
本帖最后由 daxiao 于 2015-3-22 02:36 编辑
功能
1.时间显示(完成) RAM2.5KB
2.整点报时 (完成) RAM2.5KB
3.量程为24小时的秒表(完成)RMA3.5KB
4.时间调整 (完成)RMA 4.5KB
5.闹钟 (完成)RAM4.8K
6.防盗警戒(未完成)
7.计算机 (未完成)
8.逻辑分析仪(未完成)
- #include<reg52.h> //头文件
- #define uchar unsigned char //宏定义
- #define uint unsigned int //宏定义
- volatile char ws;
- uchar lcd6;
- uchar jm;
- uchar n,y,r,s,f,m,z;
- uchar ns,nf,nm;
- uchar we;
- uchar bla,blb,blc;
- sbit ACC_7=ACC^7; //位寄存器
- sbit SCLK=P1^3; //时钟引脚定义
- sbit DIO=P1^4; //IO引脚定义
- sbit CE=P1^5; //读、写数据期间,必须为高
- sbit LCD_RS=P1^0; //寄存器选择位
- sbit LCD_RW=P1^1; //读写控制位
- sbit LCD_EN=P1^2; //开关
- sbit FMQ=P3^7; //定义蜂鸣引脚
- uchar code LCD[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46}; //LCD的数字整形码
- uchar code LCDDZ[13]={0x02,0x03,0x05,0x06,0x08,0x09,0x43,0x48,0x49,0x4b,0x4c,0x4e,0x4f};
- uchar code LCD7_1[16]={"1.clock shows "}; //界面1入口,“时钟显示”
- uchar code LCD7_2[16]={"2.second clock "}; //界面2入口,“秒的时钟”
- uchar code LCD7_3[16]={"3.alarm clock "}; //界面3入口,“闹钟”
- uchar code LCD7_4[16]={"4.onguard "}; //界面4入口,“值班警戒”
- uchar code LCD7_5[16]={"5.news "}; //界面5人口,"信息"
- uchar code LCD7_6[16]={"6.time alter "}; //界面6修改时间
- uchar code LCD8_0[16]={" 09 DZ1B "};
- uchar code LCD1_0[16]={"20 . . "}; //界面1,时间显示
- uchar code LCD1_1[16]={"WEEK : : "}; //界面1,时间显示
- uchar code LCD2_0[16]={" 00:00:00 "}; //界面2,秒表
- uchar code LCD3_0[16]={"alarm 00:00:00 "}; //界面3,时间设置
- uchar code LCD4_0[16]={"00:00 - 00:00"}; //界面4,警戒时间设置
- uchar code LCD5_0[16]; //界面5,信息栏记录陌生人进人情况
- uchar code LCD5_1[16]; //界面5,信息栏记录陌生人进人情况
- uchar code LCD5_2[16]; //界面5,信息栏记录陌生人进人情况
- uchar code LCD5_3[16]; //界面5,信息栏记录陌生人进人情况
- uchar code LCD5_4[16]; //界面5,信息栏记录陌生人进人情况
- uchar code LCD6_0[16]={"20 . . "};
- uchar code LCD6_1[16]={"WEEK : : "};
- uchar code LCDY[5];
- uchar code LCDR[5];
- uchar code LCDS[5];
- uchar code LCDF[5];
- uchar code LCDM[5];
-
- //-------------------延时子函数 ---//
- void delay(uint ms)
- {
- uchar ii,jj;
- for(ii=0;ii<ms;ii++)
- {
- for(jj=0;jj<121;jj++)
- {;}
- }
- }
- //------------------X1302------//
- void X1302(uchar add,uchar dat) //地址,数据
- {
- uchar aa;
- CE=0; //关闭读写使能,读、写数据期间,必须为高
- SCLK=0; //拉低时钟线
- CE=1; //开启读写使能
- for(aa=0;aa<8;aa++) //写入地址
- {
- DIO=add&0x01; //把add的最低位送给数据线
- SCLK=1; //时钟拉高
- add>>=1; //累加器右移1位
- SCLK=0; //时钟拉
-
- }
- for(aa=0;aa<8;aa++) //写入数据
- {
- DIO=dat&0x01; //把要写入1302的数据地位送到数据线
- SCLK=1; //时钟拉高,把数据发送出去
- dat>>=1; //数据右移1位,把最低位去掉
- SCLK=0; //把时钟拉低,准备下一次发数据
- }
- SCLK=1; //写完数据要把时钟线拉高,要是读完数据的话就要拉低时钟线
- CE=0; //关闭读写使能
- return;
- }
- //-------------------D1302-------------//
- uchar D1302(uchar addr) //读数据子函数 输入地址,返回数据
- {
- uchar ab,temp,dat1,dat2; //定义变量
- CE=0; //关闭读写数据使能
- SCLK=0; //时钟拉低,准备要接收数据
- CE=1; //开读写数据使能
- for(ab=8;ab>0;ab--) //发地址
- {
- SCLK=0; //时钟拉低,准备接收数据
- temp=addr; //把地址送给变量temp
- DIO=(bit)(temp&0x01); //传送低字节
- addr>>=1; //地址addr右移1位
- SCLK=1; //时钟拉高 ,让1302读入地址
- }
- for(ab=8;ab>0;ab--) //读数据
- {
- ACC_7=DIO; // ACC-7=接收新的一位数据
- SCLK=1; //时钟拉高,告诉1302我接收到数据了!!
- ACC>>=1; //ACC右移1位,把刚接到的数据移到低位去
- SCLK=0; //时钟拉低,告诉1302,请为我准备下一个数据
- }
- CE=0; //关闭读写数据使能
- dat1=ACC; //把ACC的数据送给dat1
- dat2=dat1/16; //数据转换 dat2=数据的 "十六位"
- dat1=dat1%16; //数据转换 dat1=数据的 "个位"
- dat1=dat1+dat2*10; //再一次数据转换(把接收到的BCD码转换成十进制码)
- return(dat1); //反回读到的数据
- }
- //-----------检查LCD忙状态 --//
- void lcd_busy()
- {
- P0=0xff;
- LCD_RS=0; //选择指令寄存器
- LCD_RW=1; //进行读操作
- LCD_EN=1; //使能
- while((P0&0x80)==0x80);
- LCD_EN=0; //关使能
- }
- //-----------------------------读LCD显示的数字--//
- uchar lcd_sz(uchar sxs)
- {
- uchar xx;
- delay(2);
- LCD_RS=0; //选择指令
- LCD_RW=0; //选择写操作
- LCD_EN=0; //关使能 ,让P0数据线上数据
- P0=(sxs|0x80); //DDRAM数据指针=80+地址变量
- delay(2);
- LCD_EN=1; //开使能 ,让LCD读单片机的指令
- delay(5);
- LCD_EN=0; //关使能
- P0=0xff; //置高电平
- LCD_RS=1; //选择指令寄存器
- LCD_RW=1; //进行读操作
- LCD_EN=1; //开使能
- delay(2);
- xx=P0; //记录数据
- LCD_EN=0; //关使能
- return xx;
- }
- //----------------------写指令数据到LCD --//
- void lcd_wcmd(uchar cmd)
- {
- lcd_busy();
- LCD_RS=0; //选择写操作
- LCD_RW=0; //进行写操作
- LCD_EN=0; //关使能 ,让数据线上数据
- P0=cmd; //送指令代码
- delay(2);
- LCD_EN=1; //开使能 ,让单片机读指令
- delay(5);
- LCD_EN=0; //关使能
- return;
- }
- //-------------------------写显示数据到LCD --//
- void lcd_wdat(uchar dat)
- {
- lcd_busy(); //读忙
- LCD_RS=1; //选择数据寄存器
- LCD_RW=0; //进行读操作
- LCD_EN=0; //关使能
- P0=dat; //写入要显示的字符
- LCD_EN=1; //开使能 ,让LCD读进数据
- delay(2);
- LCD_EN=0; //关使能 ,不让LCD操作
- return;
- }
- //----------------------设定显示位置 pos是屏幕的地址 --//
-
- void lcd_pos(uchar pos)
- {
- lcd_busy();
- LCD_RS=0; //选择写操作
- LCD_RW=0; //进行写操作
- LCD_EN=0; //关使能 ,让数据线上数据
- P0=(pos|0x80); //DDRAM数据指针=80+地址变量
- delay(2);
- LCD_EN=1; //开使能 ,让单片机读指令
- delay(5);
- LCD_EN=0; //关使能
- return;
- }
- //-----------------------LCD初始化设定 --//
- void lcd_init()
- {
- lcd_busy(); //读忙
- lcd_wcmd(0x3c); //工作方式设置8位长,两行,5*7
- delay(5); //延时5ms
- lcd_wcmd(0x02);
- delay(5); //延时5ms
- lcd_wcmd(0x06); //设置输入方式为AC是加1计数器,画面禁止滚动
- delay(5); //延时5ms
- lcd_wcmd(0x0c); //显示开,关光标
- delay(5); //延时5mS
- return;
- }
- //---------------闪动子程序 //
- void fengming(uchar fm)
- {
- for(;fm<0;fm--)
- {
- FMQ=0;
- lcd_wcmd(0x08); //关闭显示
- delay(200);
- FMQ=1; //延时
- lcd_wcmd(0x0c); //开显示
- delay(200);
- }
- return;
- }
- //----------------------- 红外--//
- void int_init(void) //初始化
- {
- EX0=1; //开外部中断0
- EX1=1; //INT1开
- IT1=1; //负跳变触发
- EA=1; //开总开关
- return;
- }
- //------------------------------------------------//
- void interrupt0()interrupt 0 //总断子函数
- {
- uchar i=0,j=0,k=0,us=0; //定义字符变量i j k us
- uchar addr[4]={0}; //定义字符型数组
- EX0=0; //关中断总开关
- for(i=0;i<255;i++) //9ms内有高电平认为是干扰
- {
- if(P3&0x04) //255的值实际时间为800us
- {
- EX0=1;
- return;
- }
- }
- while(!(P3&0x04)); //等待9ms低电平过去
- for(i=0;i<4;i++)
- {
- for(j=0;j<8;j++)
- {
- while(P3&0x04); //等待4.5ms高电平过去
- while(!(P3&0x04)); //等待0.56ms低电平后面的高电平
- while(P3&0x04) //计算这个高电平的时间
- {
- for(us=0;us<=32;us++); //100us的延时语句
- if((k++)>=30) //高电平时间过长退出程序
- {
- EX0=1;
- return;
- }
- }
- addr[i]=addr[i]>>1; //接收一位数据
- if(k>=8)
- addr[i]=addr[i]|0x80; //高电平大于0.56ms,则为1
- k=0;
- }
- }
- ws=addr[2];
- FMQ=0;
- for(j=5;j>0;j++)
- {
- for(i=0;i<121;i++)
- {;}
- }
- FMQ=1;
- EX0=1;
- }
- //------------------------------------------//
- void interrupt2()interrupt 2 //总断子函数
- {
- uchar d,e;
- EX0=0;
- FMQ=0;
- for(bla=0;bla<3;bla++)
- {
- for(blb=0;blb<121;blb++)
- {for(d=0;d<1000;d++)
- {
- for(e=0;e<40;e++)
- {
- ;
- }
- FMQ=~FMQ;
- }
- for(d=0;d<350;d++)
- {
- for(e=0;e<140;e++)
- {
- ;
- }
- FMQ=~FMQ;
- }
- }
- }
- FMQ=1;
- EX0=1;
- }
- //---------------------------------主菜单 JM7---------/
- void JM7CD()
- {
- uchar K7=1;
- uchar i;
- if(jm==0x70)
- {
- jm=0x71;
- }
- lcd_wcmd(0x0f);
- delay(2);
- ws=0x01;
- while(K7)
- {
- while(ws==0x00);
- {
- switch(ws)
- {
- case 0x43: //确认
- jm%=16;
- jm*=16;
- K7=0;
- break;
- case 0x47: //确认
- jm%=16;
- jm*=16;
- K7=0;
- break;
- case 0x44: //上一条
- if(jm>0x71)
- {
- jm-=0x01;
- }
- break;
- case 0x07: //上一条
- if(jm>0x71)
- {
- jm-=0x01;
- }
- break;
- case 0x19: //上一条
- if(jm>0x71)
- {
- jm-=0x01;
- }
- break;
- case 0x40: //下一条
- if(jm<0x76)
- {
- jm+=0x01;
- }
- break;
- case 0x15: //下一条
- if(jm<0x76)
- {
- jm+=0x01;
- }
- break;
- case 0x0d: //下一条
- if(jm<0x76)
- {
- jm+=0x01;
- }
- break;
- case 0x0c: //第1界面
- jm=0x10;
- K7=0;
- break;
- case 0x18: //第2界面
- jm=0x20;
- K7=0;
- break;
- case 0x5e: //第3界面
- jm=0x30;
- K7=0;
- break;
- case 0x08: //第4界面
- jm=0x40;
- K7=0;
- break;
- case 0x1c: //第5界面
- jm=0x50;
- K7=0;
- break;
- case 0x5a: //第6界面
- jm=0x60;
- K7=0;
- break;
- default:
- break;
- }
- }
- delay(10);
- {
- switch(jm)
- {
- case 0x71:
- lcd_pos(0x00);
- delay(2);
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_1[i]); // 1.clock shows 界面1入口,“时钟显示”
- delay(2);
- }
- lcd_pos(0x40);
- delay(2);
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_2[i]); //2.second clock
- delay(2);
- }
- break;
- case 0x72:
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_2[i]); //2.second clock
- delay(2);
- }
- lcd_pos(0x40);
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_3[i]); //3.alarm clock 界面3入口,“闹钟”
- delay(2);
- }
- break;
- case 0x73:
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_3[i]); //3.second clock
- delay(2);
- }
- lcd_pos(0x40);
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_4[i]); //4.alarm clock 界面3入口,“闹钟”
- delay(2);
- }
- break;
- case 0x74: //4.alarm clock 界面3入口,“闹钟”
- for(i=0;i<16;i++)
- {
- lcd_wdat(LCD7_4[i]);
- delay(2);
- }
- lcd_pos(0x40);
- for(i=0;i<16;i++) //5
- {
- lcd_wdat(LCD7_5[i]);
- delay(2);
- }
- break;
- case 0x75:
- for(i=0;i<16;i++)
- { // 5
- lcd_wdat(LCD7_5[i]);
- delay(2);
- }
- lcd_pos(0x40);
- for(i=0;i<16;i++)
- { //6
- lcd_wdat(LCD7_6[i]);
- delay(2);
- }
- break;
- case 0x76:
- for(i=0;i<16;i++)
- { // 5
- lcd_wdat(LCD7_6[i]);
- delay(2);
- }
- lcd_pos(0x40);
- for(i=0;i<16;i++)
- { //6
- lcd_wdat(LCD8_0[i]);
- delay(2);
- }
-
- break;
- default:break;
- }
- lcd_pos(0x00);
- delay(2);
- }
- ws=0x00;
- }
- lcd_wcmd(0x0c);
- return;
- }
- //-------------------------------------------JM1 显示时间//
- void JM1SJ()
- {
- uchar K1=1;
- lcd_pos(0x00);
- for(K1=0;K1<16;K1++)
- {
- lcd_wdat(LCD1_0[K1]);
- delay(2);
- }
- lcd_pos(0x40);
- for(K1=0;K1<16;K1++)
- {
- lcd_wdat(LCD1_1[K1]);
- delay(2);
- }
- K1=1;
- while(K1)
- {
- n=D1302(0x8d); //读1302的年
- delay(1);
- y=D1302(0x89); //读1302的月
- delay(1);
- r=D1302(0x87); //读1302的日
- delay(1);
- s=0x1f&D1302(0x85); //读1302的时
- delay(1);
- f=0x7f&D1302(0x83); //读1302的分
- delay(1);
- m=0x7f&D1302(0x81); //读1302的秒
- delay(1);
- z=D1302(0x8b); //读1302的星期
- delay(1);
- lcd_pos(0x02); //定位
- delay(2);
- lcd_wdat(LCD[n/10]); //写 LCD1602显示十位年
- delay(1);
- lcd_wdat(LCD[n%10]); //写LCD1602显示年
- delay(1);
- lcd_pos(0x05); //定位
- delay(2);
- lcd_wdat(LCD[y/10]); //写显示十位月
- delay(1);
- lcd_wdat(LCD[y%10]); //写显示月
- delay(1);
- lcd_pos(0x08); //定位
- delay(2);
- lcd_wdat(LCD[r/10]); //写显示十位日
- delay(1);
- lcd_wdat(LCD[r%10]); //写显示日
- delay(1);
- lcd_pos(0x44); //定位
- delay(2);
- lcd_wdat(LCD[z]); //写显示星期
- delay(1);
- lcd_pos(0x48); //定位
- delay(2);
- lcd_wdat(LCD[s/10]); //显示十位时
- delay(1);
- lcd_wdat(LCD[s%10]); //显示时
- delay(1);
- lcd_pos(0x4b); //定位
- delay(2);
- lcd_wdat(LCD[f/10]); //显示十位分
- delay(1);
- lcd_wdat(LCD[f%10]); //显示分
- delay(1);
- lcd_pos(0x4e); //定位
- delay(2);
- lcd_wdat(LCD[m/10]); //显示秒的十位
- delay(2);
- lcd_wdat(LCD[m%10]); //显示秒的个位
- delay(2);
- while(s==ns&&f==nf&&m==nm&&we==1) //闹钟
- {
- while(ws==0x00)
- {
- FMQ=0;
- for(s=5;s>0;s++)
- {
- for(m=0;m<121;m++)
- {;}
- }
- FMQ=1;
- }
- ws=0x99;
- s++;
- }
- while(f==0x00||f==0x1e) //整点报时
- {
-
- while(m<0x01)
- {
- FMQ=0;
- delay(3);
- m=0x03;
- }
- FMQ=1;
- f++;
- }
- while(ws==0x45||ws==0x46) // 退出
- {
- K1=0;
- jm=0x70;
- ws=0x00;
- }
- }
- return;
- }
- //------------------------------------------JM2MB 秒表//
- void JM2MB()
- {
- uchar K2=1; //定义变量K2
- uint bs,bf,bm; //定义变量bs,bf,bm 时分秒
- uchar i,j; //定义变量i,j
- lcd_wcmd(0x01); // 写清屏指令到LCD
- lcd_pos(0x00); //设定LCD的显示位置0x00
- for(i=0;i<16;i++) //把秒表的摸块显示出来 00:00:00
- {
- lcd_wdat(LCD2_0[i]);
- }
- while(K2) //进入K2函数循环
- {
- bs=0x1f&D1302(0x85); //读当前时间时
- bf=0x7f&D1302(0x83); //读当前时间分
- bm=0x7f&D1302(0x81); //读当前时间秒
- delay(10);
- while(ws==0x43) //开始计时循环
- {
- j=0x7f&D1302(0x81); //变量j赋值时间秒
- i=j;
- if(j<bm) //判断j和bm那个大
- {j=bm-j;
- j=0x3c-j;
- }
- else{j-=bm;}
- lcd_pos(0x0a); //定位
- delay(2);
- lcd_wdat(LCD[j/0x0a]); //显示秒的十位
- delay(2);
- lcd_wdat(LCD[j%0x0a]); //显示秒的个位
- delay(2);
- delay(2);
- j=0x7f&D1302(0x83); //变量j赋值时间分
- if(j<bf&&i<bm)
- {j=bf-j;
- j=0x3c-j;
- j-=0x01;
- }
- else if(j<bf&&i>=bm)
- {
- j=bf-j;
- j=0x3c-j;
- }
- else if(j>bf&&i<bm)
- {
- j-=bf;
- j-=0x01;
- }
- else {j-=bf;}
- lcd_pos(0x07); //定位
- delay(2);
- lcd_wdat(LCD[j/0x0a]); //显示十位分
- delay(1);
- lcd_wdat(LCD[j%0x0a]); //显示分
- delay(1);
-
- delay(2);
- i=0x7f&D1302(0x83); //读当前时间分
- j=0x1f&D1302(0x85); //读当前时间时
- if(j<bs&&i<bf)
- {j=bs-j;
- j=0x3c-j;
- j-=0x01;
- }
- else if(j<bs&&i>=bf)
- {
- j=bs-j;
- j=0x3c-j;
- }
- else if(j>bs&&i<bf)
- {
- j-=bs;
- j-=0x01;
- }
- else {j-=bs;}
- lcd_pos(0x04); //定位
- delay(2);
- lcd_wdat(LCD[j/0x0a]); //显示十位分
- delay(1);
- lcd_wdat(LCD[j%0x0a]); //显示分
- delay(1);
-
- }
- switch(ws)
- {
- case 0x46:jm=0x70;ws=0x00;K2=0;break; //主菜单
- case 0x45:jm=0x70;ws=0x00;K2=0;break; //退出
- default:break;
- }
- }
- return;
- }
- //--------------------------闹钟设置 ----//
- void JM3NZ()
- {
- uchar K3; //定义K3开关
- bit K3x1=1,K3x2=0,K3x3=0,K3x4=0,K3x5=0,K3x6=0,K3x7=0; //定义光标标志位
- lcd_wcmd(0x01); //清屏
- lcd_pos(0x00); //设定显示的位置
- for(K3=0;K3<16;K3++)
- {
- lcd_wdat(LCD3_0[K3]); //显示摸
- }
- lcd_pos(0x06); //设定LCD的显示位置
- lcd_wcmd(0x0f); //写指令到LCD显示光标
- K3=1;
- while(K3)
- {
- while(K3x1)
- {
- lcd_pos(0x06);
- switch(ws) //十小时设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x1=0;K3x2=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x1=0;K3x2=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x1=0;K3x2=1;break; //按下2
- case 0x0d:ws=0x00;K3x1=0;K3x2=1;break; //下一个
- case 0x40:ws=0x00;K3x1=0;K3x2=1;break; //下一个
- case 0x44:ws=0x00;K3x1=0;K3x7=1;break; //上一个
- case 0x19:ws=0x00;K3x1=0;K3x7=1;break; //上一个
- case 0x43:ws=0x00;K3x1=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x1=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x1=0;K3=0;break; //主菜单
- default:break;
- }
- }
-
- while(K3x2&&lcd_sz(0x06)==LCD[2])
- {
- lcd_pos(0x07);
- switch(ws) //个小时设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break; //按下3
- case 0x0d:ws=0x00;K3x2=0;K3x4=1;break; //下一个
- case 0x40:ws=0x00;K3x2=0;K3x4=1;break; //下一个
- case 0x44:ws=0x00;K3x2=0;K3x1=1;break; //上一个
- case 0x19:ws=0x00;K3x2=0;K3x1=1;break; //上一个
- case 0x43:K3x2=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x2=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x2=0;K3=0;break; //主菜单
- default:break;
- }
- }
-
- while(K3x2)
- {
- lcd_pos(0x07);
- switch(ws) //个小时设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x2=0;K3x4=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x2=0;K3x4=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x2=0;K3x4=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x2=0;K3x4=1;break; //按下3
- case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x2=0;K3x4=1;break; //按下4
- case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x2=0;K3x4=1;break; //按下5
- case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x2=0;K3x4=1;break; //按下6
- case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x2=0;K3x4=1;break; //按下7
- case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x2=0;K3x4=1;break; //按下8
- case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x2=0;K3x4=1;break; //按下9
- case 0x0d:ws=0x00;K3x2=0;K3x4=1;break; //下一个
- case 0x40:ws=0x00;K3x2=0;K3x4=1;break; //下一个
- case 0x19:ws=0x00;K3x2=0;K3x1=1;break; //上一个
- case 0x44:ws=0x00;K3x2=0;K3x1=1;break; //上一个
- case 0x43:K3x2=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x2=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x2=0;K3=0;break; //主菜单
- default:break;
- }
- }
-
- while(K3x4)
- {
- lcd_pos(0x09);
- switch(ws) //十分设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x4=0;K3x5=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x4=0;K3x5=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x4=0;K3x5=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x4=0;K3x5=1;break; //按下3
- case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x4=0;K3x5=1;break; //按下4
- case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x4=0;K3x5=1;break; //按下5
- case 0x0d:ws=0x00;K3x4=0;K3x5=1;break; //下一个
- case 0x40:ws=0x00;K3x4=0;K3x5=1;break; //下一个
- case 0x19:ws=0x00;K3x4=0;K3x2=1;break; //上一个
- case 0x44:ws=0x00;K3x4=0;K3x2=1;break; //上一个
- case 0x43:K3x4=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x4=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x4=0;K3=0;break; //主菜单
- default:break;
- }
- }
- while(K3x5)
- {
- lcd_pos(0x0a);
- switch(ws) //个分设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x5=0;K3x6=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x5=0;K3x6=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x5=0;K3x6=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x5=0;K3x6=1;break; //按下3
- case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x5=0;K3x6=1;break; //按下4
- case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x5=0;K3x6=1;break; //按下5
- case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x5=0;K3x6=1;break; //按下6
- case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x5=0;K3x6=1;break; //按下7
- case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x5=0;K3x6=1;break; //按下8
- case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x5=0;K3x6=1;break; //按下9
- case 0x0d:ws=0x00;K3x5=0;K3x6=1;break; //下一个
- case 0x40:ws=0x00;K3x5=0;K3x6=1;break; //下一个
- case 0x19:ws=0x00;K3x5=0;K3x4=1;break; //上一个
- case 0x44:ws=0x00;K3x5=0;K3x4=1;break; //上一个
- case 0x43:K3x5=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x5=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x5=0;K3=0;break; //主菜单
- default:break;
- }
- }
- while(K3x6)
- {
- lcd_pos(0x0c);
- switch(ws) //十秒设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x6=0;K3x7=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x6=0;K3x7=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x6=0;K3x7=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x6=0;K3x7=1;break; //按下3
- case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x6=0;K3x7=1;break; //按下4
- case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x6=0;K3x7=1;break; //按下5
- case 0x0d:ws=0x00;K3x6=0;K3x7=1;break; //下一个
- case 0x40:ws=0x00;K3x6=0;K3x7=1;break; //下一个
- case 0x19:ws=0x00;K3x6=0;K3x5=1;break; //上一个
- case 0x44:ws=0x00;K3x6=0;K3x5=1;break; //上一个
- case 0x43:K3x6=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x6=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x6=0;K3=0;break; //主菜单
- default:break;
- }
- }
- while(K3x7)
- {
- lcd_pos(0x0d);
- switch(ws) //个秒设定
- {
- case 0x16:ws=0x00;lcd_wdat(LCD[0]);K3x7=0;K3x1=1;break; //按下0
- case 0x0c:ws=0x00;lcd_wdat(LCD[1]);K3x7=0;K3x1=1;break; //按下1
- case 0x18:ws=0x00;lcd_wdat(LCD[2]);K3x7=0;K3x1=1;break; //按下2
- case 0x5e:ws=0x00;lcd_wdat(LCD[3]);K3x7=0;K3x1=1;break; //按下3
- case 0x08:ws=0x00;lcd_wdat(LCD[4]);K3x7=0;K3x1=1;break; //按下4
- case 0x1c:ws=0x00;lcd_wdat(LCD[5]);K3x7=0;K3x1=1;break; //按下5
- case 0x5a:ws=0x00;lcd_wdat(LCD[6]);K3x7=0;K3x1=1;break; //按下6
- case 0x42:ws=0x00;lcd_wdat(LCD[7]);K3x7=0;K3x1=1;break; //按下7
- case 0x52:ws=0x00;lcd_wdat(LCD[8]);K3x7=0;K3x1=1;break; //按下8
- case 0x4a:ws=0x00;lcd_wdat(LCD[9]);K3x7=0;K3x1=1;break; //按下9
- case 0x0d:ws=0x00;K3x7=0;K3x1=1;break; //下一个
- case 0x40:ws=0x00;K3x7=0;K3x1=1;break; //下一个
- case 0x19:ws=0x00;K3x7=0;K3x6=1;break; //上一个
- case 0x44:ws=0x00;K3x7=0;K3x6=1;break; //上一个
- case 0x43:K3x7=0;K3=0;break; //确定
- case 0x45:ws=0x00;K3x7=0;K3=0;break; //退出
- case 0x46:ws=0x00;K3x7=0;K3=0;break; //主菜单
- default:break;
- }
- }
- while(ws==0x43) //按下确定键,保存闹钟时间
- {
- while(lcd_sz(0x06)==LCD[0]){ns=0x00;}
- while(lcd_sz(0x07)==LCD[1]){ns+=0x01;}
- }
- }
- jm=0x70;
- lcd_wcmd(0x0c);
- }
- //------------------------警戒设置-----//
- void JM4JJ()
- {
- uchar K4;
- lcd_wcmd(0x01);
- lcd_pos(0x00);
- for(K4=0;K4<16;K4++)
- {
- lcd_wdat(LCD4_0[K4]);
- }
- while(1);
- }
- //--------------------------入侵信息---//
- void JM5XX()
- {
- uchar K5;
- lcd_wcmd(0x01);
- lcd_pos(0x00);
- for(K5=0;K5<16;K5++)
- {
- lcd_wdat(LCD6_0[K5]);
- }
- delay(2);
- lcd_pos(0x40);
- for(K5=0;K5<16;K5++)
- {
- lcd_wdat(LCD6_1[K5]);
- }
- while(1);
- }
- //------------------------------修改时间-----//
- void JM6SJ()
- {
- uchar K6;
- lcd_wcmd(0x01);
- lcd_pos(0x00);
- for(K6=0;K6<16;K6++)
- {
- lcd_wdat(LCD6_0[K6]);
- }
- delay(2);
- lcd_pos(0x40);
- for(K6=0;K6<16;K6++)
- {
- lcd_wdat(LCD6_1[K6]);
- }
- K6=1;
- while(K6)
- {
- ;
- }
- }
- //------------------------------主函数 //
- void main()
- {
- uchar bl;
- int_init(); //中断 初始化
- bl=D1302(0x81);
- bl=0x7f&bl;
- X1302(0x80,bl);
- delay(1);
- X1302(0x8e,0x00);
- X1302(0x90,0xa5);
- X1302(0x8e,0x80); //关闭写,但可以读
- lcd_init(); //LCD初始化
- delay(2);
- lcd_pos(0x00); //设定显示的位置
- jm=0x10;
- while(1)
- {
- if(jm==0x70){JM7CD();}
- else if(jm==0x10){JM1SJ();} //时间
- else if(jm==0x20){JM2MB();} // 秒表
- else if(jm==0x30){JM3NZ();} // 闹钟
- else if(jm==0x40){JM4JJ();} // 警戒
- else if(jm==0x50){JM5XX();} // 信息
- else if(jm==0x60){JM6SJ();} //时间修改
- else{;}
- }
- }
复制代码
|
|