|
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ad1_7 P1
- uchar hour,min,sec,shangxian,xiaxian,sett,count,cent0=0,cent1=0;
- uint mv;
- uchar code table1[]={" H: : H: %"};
- uchar code table2[]={"MV: % L: %"};
- sbit lcden=P2^5;
- sbit lcdrw=P2^6;
- sbit lcdrs=P2^7;
- sbit key1=P2^0;
- sbit scl=P2^1;
- sbit key3=P2^2;
- sbit key4=P2^3;
- sbit inc=P2^2;
- sbit dec=P2^3;
- sbit led1=P2^4;
- sbit sda=P3^2;
- sbit buzzer=P3^3;
- sbit led=P3^4;
- sbit ADCS=P3^5;
- sbit ADRD=P3^6;
- sbit ADWR=P3^7;
- bit flag,flag0=0;
- void delay()
- {;;}
- void delay1(uint xs)//定時1ms
- {
- uint i,j;
- for(j=xs;j>0;j--)
- for(i=110;i>0;i--);
- }
- void start_adc0804(void)
- {
- ADCS=0;
- ADWR=0;
- delay1(1);
- ADWR=1;
- ADCS=1;
- delay1(1);
- }
- read_ad()
- {
- uchar ad_data;
- ad1_7=0xff;
- ADCS=0;
- ADRD=0;
- delay1(1);
- ad_data=ad1_7;
- ADRD=1;
- ADCS=1;
-
- return(ad_data);
- }
- void start()//開始
- {
- sda=1;
- delay();
- scl=1;
- delay();
- sda=0;
- delay();
- }
- void stop() //結束
- {
- sda=0;
- delay();
- scl=1;
- delay();
- sda=1;
- delay();
- }
- void respons()//應答
- {
- uchar i;
- scl=1;
- delay();
- while((sda==1)&&(i<250))
- i++;
- scl=0;
- delay();
- }
- void init()
- {
- scl=1;
- sda=1;
- }
- void write_byte(uchar date)
- {
- uchar i,temp;
- temp=date;
- scl=0;
- delay();
- for(i=0;i<8;i++)
- {
- temp=temp<<1;
- sda=CY;
- delay();
- scl=1;
- delay();
- scl=0;
- delay();
- }
- sda=1;
- delay();
- }
- uchar read_byte()
- {
- uchar i,j,k;
- scl=0;
- delay();
- sda=1;
- delay();
- for(i=0;i<8;i++)
- {
- scl=1;
- delay();
- if(sda)
- j=1;
- else
- j=0;
- k=((k<<1)|j);
- delay();
- scl=0;
- delay();
- }
- return k;
- }
- void write_add(uchar add,uchar date)
- {
- start();
- write_byte(0xa0);
- respons();
- write_byte(add);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- uchar read_add(uchar add)
- {
- uchar date;
- start();
- write_byte(0xa0);
- respons();
- write_byte(add);
- respons();
- start();
- write_byte(0xa1);
- respons();
- date=read_byte();
- stop();
- return date;
- }
- void write_comm(uchar comm)
- {
- lcdrs=0;
- P0=comm;
- delay1(5);//5ms
- lcden=1;
- delay1(5);//5ms
- lcden=0;
- }
- void write_data(uchar dat)
- {
- lcdrs=1;
- P0=dat;
- delay1(5);//5ms
- lcden=1;
- delay1(5);//5ms
- lcden=0;
- }
- void init1()
- {
- lcdrw=0;
- lcden=0;
- write_comm(0x38);
- write_comm(0x0c);
- write_comm(0x06);
- write_comm(0x01);
- write_comm(0x80);
- }
- void set_scan()
- {
- if(sett)
- {
- led1=0;
- TR0=0;
- }
- else
- {
- led1=1;
- TR0=1;
- }
- if(!key1)
- {
- delay1(5);
- if(!key1)
- {
- sett++;
- if(sett>5)
- sett=0;
- }
- while(!key1);
- delay1(5);
- while(!key1);
- }
- if(sett==1)
- {
- if(!key3)
- {
- delay1(5);
- if(!key3)
- {
- hour++;
- if(hour>99)
- hour=0;
- }
- while(!key3);
- delay1(5);
- while(!key3);
- }
- if(!key4)
- {
- delay1(5);
- if(!key4)
- {
- if(hour==0)
- hour=99;
- else
- hour--;
- }
- while(!key4);
- delay1(5);
- while(!key4);
- }
- write_add(20,hour);
- write_comm(0x80);
- write_data(0x30+hour/10);
- write_data(0x30+hour%10);
- write_comm(0x80+1);
- write_comm(0x0f);
- }
- if(sett==2)
- {
- if(!key3)
- {
- delay1(5);
- if(!key3)
- {
- min++;
- if(min==60)
- min=0;
- }
- while(!key3);
- delay1(5);
- while(!key3);
- }
- if(!key4)
- {
- delay1(5);
- if(!key4)
- {
- if(min==0)
- min=59;
- else
- min--;
- }
- while(!key4);
- delay1(5);
- while(!key4);
- }
- write_add(21,min);
- write_comm(0x80+4);
- write_data(0x30+(min/10));
- write_data(0x30+(min%10));
- write_comm(0x80+5);
- write_comm(0x0f);
- }
- if(sett==3)
- {
- if(!key3)
- {
- delay1(5);
- if(!key3)
- {
- sec++;
- if(sec==60)
- sec=0;
- }
- while(!key3);
- delay1(5);
- while(!key3);
- }
- if(!key4)
- {
- delay1(5);
- if(!key4)
- {
- if(sec==0)
- sec=59;
- else
- sec--;
- }
- while(!key4);
- delay1(5);
- while(!key4);
- }
- write_add(22,sec);
- write_comm(0x80+7);
- write_data(0x30+(sec/10));
- write_data(0x30+(sec%10));
- write_comm(0x80+8);
- write_comm(0x0f);
- }
- if(sett==4)
- {
- if(!key3)
- {
- delay1(5);
- if(!key3)
- {
- shangxian++;
- if(shangxian==100)
- shangxian=0;
- }
- while(!key3);
- delay1(5);
- while(!key3);
- }
- if(!key4)
- {
- delay1(5);
- if(!key4)
- {
- if(shangxian==0)
- shangxian=99;
- else
- shangxian--;
- }
- while(!key4);
- delay1(5);
- while(!key4);
- }
- write_add(23,shangxian);
- write_comm(0x80+13);
- write_data(0x30+(shangxian/10));
- write_data(0x30+(shangxian%10));
- write_comm(0x80+14);
- write_comm(0x0f);
- }
- if(sett==5)
- {
- if(!key3)
- {
- delay1(5);
- if(!key3)
- {
- xiaxian++;
- if(xiaxian==100)
- xiaxian=0;
- }
- while(!key3);
- delay1(5);
- while(!key3);
- }
- if(!key4)
- {
- delay1(5);
- if(!key4)
- {
- if(xiaxian==0)
- xiaxian=99;
- else
- xiaxian--;
- }
- while(!key4);
- delay1(5);
- while(!key4);
- }
- write_add(24,xiaxian);
- write_comm(0x80+0x40+13);
- write_data(0x30+(xiaxian/10));
- write_data(0x30+(xiaxian%10));
- write_comm(0x80+0x40+14);
- write_comm(0x0f);
- }
- }
- void init2()
- {
- uchar i;
- for(i=0;i<16;i++)
- write_data(table1[i]);
- write_comm(0x80+0x40);
- for(i=0;i<16;i++)
- write_data(table2[i]);
- hour=read_add(20);
- write_comm(0x80);
- write_data(0x30+(hour/10));
- write_data(0x30+(hour%10));
- min=read_add(21);
- write_comm(0x80+4);
- write_data(0x30+(min/10));
- write_data(0x30+(min%10));
- sec=read_add(22);
- write_comm(0x80+7);
- write_data(0x30+(sec/10));
- write_data(0x30+(sec%10));
- shangxian=read_add(23);
- write_comm(0x80+13);
- write_data(0x30+(shangxian/10));
- write_data(0x30+(shangxian%10));
- xiaxian=read_add(24);
- write_comm(0x80+0x40+13);
- write_data(0x30+(xiaxian/10));
- write_data(0x30+(xiaxian%10));
- mv=read_add(25);
- write_comm(0x80+0x40+7);
- write_data(0x30+(mv/10));
- write_data(0x30+(mv%10));
- write_data(table1[15]);
- }
- void daojishi()
- {
- write_comm(0x80);
- write_data(0x30+(hour/10));
- write_data(0x30+(hour%10));
- write_comm(0x80+4);
- write_data(0x30+(min/10));
- write_data(0x30+(min%10));
- write_comm(0x80+7);
- write_data(0x30+(sec/10));
- write_data(0x30+(sec%10));
- }
- void main()
- {
- uint temp;
- //buzzer=0;
- init();
- init1();
- init2();
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)/256;
- EA=1;
- ET0=1;
- TR0=1;
- /*for(i=0;i<16;i++)
- {
- write_comm(0x18);
- delay(200);
- }*/
- sett=0;
- while(1)
- {
- if(!sett)
- {
-
- if(flag)
- while(1);
- daojishi();
- set_scan();
- start_adc0804();
- temp= read_ad();
- mv=temp*(1.0/255)*100;
- if(mv>=100)
- mv=0;
- else
- mv=100-mv;
- if((mv>=shangxian)||(mv<=xiaxian))
- {
- flag0=1;
- led=0;
- }
- else
- {
- flag0=0;
- led=1;
- }
- if(cent0>=12)
- {
- cent0=0;
- write_add(25,mv);
- write_comm(0x80+0x40+3);
- write_data(0x30+(mv/10));
- write_data(0x30+(mv%10));
- write_comm(0x0c);
- }
- }
- else if(sett)
- {
- set_scan();
- cent1=0;
- buzzer=1;
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)/256;
- count++;
- cent0++;
-
- if(count==20&&!sett)
- {
- count=0;
- if(sec==0)
- {
- if(min==0)
- {
- if(hour==0)
- {
- flag=1;
- TR0=0;
- }
- else
- {
- hour--;
- min=59;
- }
- }
- else
- {
- min--;
- sec=59;
- }
- }
- else
- sec--;
- }
- if(flag0==1)
- {
- cent1++;
- if(cent1<6)
- buzzer=1;
- else if(cent1<12)
- buzzer=0;
- else
- cent1=0;
- }
- else
- {
- cent1=0;
- buzzer=1;
- }
-
-
- }
復制代碼 |
-
-
原理圖.rar
2021-1-1 23:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
174.7 KB, 下載次數: 18, 下載積分: 黑幣 -5
-
-
程序.zip
2021-1-1 23:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
47.63 KB, 下載次數: 13, 下載積分: 黑幣 -5
|