|
|
Keil代碼下載:
測試 - 實物 - 增加OLED.7z
(402.3 KB, 下載次數(shù): 0)
2025-8-5 13:38 上傳
點擊文件名下載附件
- /*******************EEPROM記錄大于255的數(shù)*****************
- *硬件平臺:STC89C52RC
- *開發(fā)環(huán)境:KEIL
- *功能:由于24c02是每個存儲地址只對應(yīng)8個bit的存儲空間,即一個
- 存儲單元所存儲的數(shù)據(jù)最大為255,該例程介紹了一種當(dāng)所記憶
- 數(shù)據(jù)大于255(而小于65536)的存儲方法。即用兩個存儲單元來
- 存儲一個數(shù)據(jù)。
- *********************************************************/
- #include "reg52.h"
- #include "intrins.h"
- #include "mcp4725.h"
- #include "24cxx.h"
- #include "ADC0832.h"
- #include "DS18B20.h"
- #include "OLED.h"
- #include <stdio.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define valdata 5000//計算值
- #define key 5//按鈕定時值更改改變消抖時間(單位t*2ms)
- /**
- 595側(cè) 芯片側(cè)
- 11 SCK 數(shù)據(jù)輸入時鐘線 SHCP Clock SPI2_SCK PB3
- 12 RCK 輸出存儲鎖存時鐘線 STCP Latch SPI2_NSS PA15
- 13 OE 輸出使能 接地 OE PD7
- 14 SI 數(shù)據(jù)線 DS1 DATA SPI2_MOSI PB5
- **/
- /*
- 16 VCC 電源 2V-6V
- 15 QA 并行輸出 QB QC....QH
- 14 SI/DS DATA 串行數(shù)據(jù)輸入
- 13 OE_ 輸出使能 PWM控制亮度
- 12 RCK/STCP CS 輸出到鎖存器時鐘
- 11 SCK/SHCP CLK DATA輸入時鐘
- 10 SCLR/MR 低電平清零 接VCC
- 9 SQH/Q7S 串行數(shù)據(jù)輸出 接下一個595
- */
- sbit ds=P3^4;
- sbit sh_cp=P3^6;
- sbit st_cp=P3^5;
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit rtcc=P1^6;
- sbit k1=P1^0; //設(shè)置加
- sbit k2=P1^1; //加
- sbit k3=P1^2; //減
- sbit k4=P1^3; //設(shè)置減/退出
- sbit k5=P1^4; //確認(rèn)保存
- sbit led=P1^7; //狀態(tài)燈
- sbit rst=P1^6; //清除24cxx內(nèi)部存儲的數(shù)據(jù)謹(jǐn)慎操作
- sbit EC11_A = P2^2; //聲明編碼器A腳IO
- sbit EC11_B = P2^3; //聲明編碼器B腳IO
- //變量
- bit EC11_A_Now = 1; //編碼器A腳穩(wěn)定值
- bit EC11_B_Now = 1; //編碼器B腳穩(wěn)定值
- signed int EC11_A_Code = 1; //EC11編碼器正轉(zhuǎn)一格鍵值
- signed int EC11_B_Code = -1; //EC11編碼器反轉(zhuǎn)一格鍵值
- bit flag1s; //1s定時標(biāo)志
- //uchar time=0; //系統(tǒng)定時 0-255
- uchar num1;
- uchar num2;
- uchar num3;
- uchar num4;
- uchar num5;
- uchar num6;
- uchar num7;
- uchar num8;
- uchar num9;
- uchar num10;
- uchar num11;
- uchar num12;
- uchar num13;
- uchar num14;
- uchar num15;
- uchar num16; //計算 0-255
- unsigned short volt1=0,volt2=0; //adc0832轉(zhuǎn)換
- bit writedat=0; //寫24C08 的標(biāo)志
- unsigned short Val; //mcp4725輸出變量 0-65535
- uchar fhz=0; //MCP4725輸出頻率
- uint set_voltage; //設(shè)定值
- uchar digit4,digit3,digit2,digit1; //設(shè)定值千百十個位
- uchar mode=0;//模式 0-255
- unsigned short mode0=0;//主顯示0 0-65535
- unsigned short mode1=0;//菜單顯示1 0-65535
- unsigned short mode2=0;//菜單顯示2 0-65535
- unsigned short mode3=0;//菜單顯示3 0-65535
- unsigned short mode4=0;//菜單顯示4 0-65535
- unsigned short mode5=0;//菜單顯示5 0-65535
- unsigned short mode6=0;//菜單顯示6 0-65535
- unsigned short mode7=0;//菜單顯示7 0-65535
- unsigned short mode8=0;//菜單顯示8 0-65535
- unsigned short ADC0;//菜單顯示5 0-65535
- unsigned short ADC1;//菜單顯示6 0-65535
- unsigned short ADC2;//菜單顯示7 0-65535
- unsigned short ADC3;//菜單顯示8 0-65535
- uchar h,m,s;//系統(tǒng)運行時間累計
- int duqu; //計算溫度18b20溫度顯示
- uint count1; //按鍵延時計數(shù)器標(biāo)志位
- /*********十進(jìn)值與BCD碼之間互換**********/
- uchar dectobcd(uchar);//十進(jìn)值轉(zhuǎn)bcd碼
- uchar bcdtodec(uchar);//bcd碼轉(zhuǎn)十進(jìn)值
- uchar hour,minute,second;//時分秒變量
- unsigned short i=0;
- uchar dis_buf[]={0,0,0,0,0,0,0,0};//顯示緩存
- uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共陰數(shù)碼管位碼
- //uchar code wela[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共陽數(shù)碼管位碼
- uchar code table[]=
- {
- 0x3F,//'0'0
- 0x06,//'1'1
- 0x5B,//'2'2
- 0x4F,//'3'3
- 0x66,//'4'4
- 0x6D,//'5'5
- 0x7D,//'6'6
- 0x07,//'7'7
- 0x7F,//'8'8
- 0x6F,//'9'9
- 0x77,//'A'10
- 0x5F,//'a'11
- 0x7F,//'B'12
- 0x7C,//'b'13
- 0x39,//'C'14
- 0x58,//'c'15
- 0x3F,//'D'16
- 0x5E,//'d'17
- 0x79,//'E'18
- 0x7B,//'e'19
- 0x71,//'F'20
- 0x71,//'f'21
- 0x7D,//'G'22
- 0x6F,//'g'23
- 0x76,//'H'24
- 0x74,//'h'25
- 0x06,//'I'26
- 0x04,//'i'27
- 0x1E,//'J'28
- 0x1E,//'j'29
- 0x38,//'L'30
- 0x06,//'l'31
- 0x37,//'N'32
- 0x54,//'n'33
- 0x3F,//'O'34
- 0x5C,//'o'35
- 0x73,//'P'36
- 0x73,//'p'37
- 0x67,//'Q'38
- 0x67,//'q'39
- 0x77,//'R'40
- 0x50,//'r'41
- 0x6D,//'S'42
- 0x6D,//'s'43
- 0x31,//'T'44
- 0x78,//'t'45
- 0x3E,//'U'46
- 0x1C,//'u'47
- 0x6E,//'Y'48
- 0x6E,//'y'49
- 0x5B,//'Z'50
- 0x5B,//'z'51
- 0x40,//'-'52
- 0x08,//'_'53
- 0x80, //'.'54
- 0x00 //' '55
- };
- //共陰數(shù)碼管編碼無小數(shù)點
- void delay1(uint z) //延時為 1ms
- {
- uchar x,x1;
- for(;z>0;z--)
- {
- for(x=0;x<114;x++)
- {for(x1=0;x1<1;x1++);}
- }
- }
- //單片機(jī)時鐘周期:11.0592MHz 以時鐘T2作為波特率發(fā)生器 //9600bps
- void SerialInit(){
- PCON &= 0x7F; //波特率不倍速 SMOD=0
- SCON = 0x50; //方式1,8位數(shù)據(jù),可變波特率,接收允許
- T2CON = 0x34;
- RCAP2H = 0xFF;
- RCAP2L = 0xDC;
- TH2 = 0xFF;
- TL2 = 0xDC;
- EA=1; //總中斷打開,采用查詢法時不用打開中斷
- ES=1; //串口中斷開關(guān),采用查詢法時不用打開中斷
- }
- //定時器
- void Timer0Init() //11.0592Mhz定時1ms
- {
- TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
- //TH0=0XFC; //給定時器賦初值,定時1ms
- //TL0=0X18;
- TH0=(65536-2000)/256; //2ms
- TL0=(65536-2000)%256; //2ms
- ET0=1; //打開定時器0中斷允許
- EA=1; //打開總中斷
- TR0=1;//打開定時器
- }
- //串口發(fā)送一個字節(jié):
- void SendByte(unsigned char sbyte)
- {
- SBUF=sbyte; //發(fā)送數(shù)據(jù)
- while(!TI); //等待發(fā)送完成
- TI=0; //清零發(fā)送標(biāo)志位
- }
- //串口發(fā)送一個字符串:
- void SendString(unsigned char *pstr) //定義指針
- {
- while(*pstr!='\0') //字符串是否發(fā)完
- {
- SendByte(*pstr);//發(fā)送字符串?dāng)?shù)據(jù)
- pstr++; //指向下一個字符
- }
- }
- //串口中斷函數(shù):
- void SerialPortInte(void) interrupt 4 //采用串口中斷法收發(fā)數(shù)據(jù)
- {
- unsigned char rbyte;
- if(RI){ //RI=1,判定為串口接收到了數(shù)據(jù),RI要清零,
- RI=0;
- rbyte=SBUF;
- if(rbyte==0x0A){
- SendString("換行");
- if(mode<17)
- mode++;
- }else if(rbyte==0x0D){
- SendString("回車");
- if(mode>0)
- mode--;
- }else{
- SendByte(rbyte);
- }
- }
- }
- //595處理開始
- void rck(void)
- {
- st_cp=1; //拉高
- st_cp=0; //拉低
- }
- void shift(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- ds=dat&0x80;//提取最高位
- sh_cp=1; //上升沿
- sh_cp=0; //下降沿
- dat<<=1;
- }
- }
- void DisplayScan()
- {
- static uchar i=0;
- shift(wei[i ]);//送位碼
- [i ] shift(dis_buf[i ]);//送段碼
- [i ][i ] rck();//鎖存
- [i ][i ] i=++i%8;//循環(huán)掃描計數(shù)
- [i ][i ]}
- [i ][i ]//595處理結(jié)束
- [i ][i ]
- void run_time()//時鐘走動函數(shù)定義
- {
- //從1307中讀出時間
- second=ds1307_read_date(0xd0,1);//返回函數(shù)r值秒
- minute=ds1307_read_date(0xd0,2);
- hour=ds1307_read_date(0xd0,0);
- //將讀出的時間轉(zhuǎn)換成十進(jìn)值
- second=bcdtodec(second);
- minute=bcdtodec(minute);
- hour=bcdtodec(hour);
- //更新串口發(fā)送時間
- }
- uchar dectobcd(uchar dec)//十進(jìn)值到BCD碼
- {
- uchar a,b,c;
- a=dec;
- b=0;
- while(a>=10)
- {
- a=a-10;
- b=b+16;
- c=a+b;
- dec=c;
- }
- return dec;
- }
- uchar bcdtodec(uchar bcd)//bcd碼轉(zhuǎn)十進(jìn)值
- {
- uchar a,b,c;
- a=bcd;
- b=0;
- while(a>=16)
- {
- a=a-16;
- b=b+10;
- c=a+b;
- bcd=c;
- }
- return bcd;
- }
- //EC11開始
- /**********************EC11動作函數(shù)**********************/
- void EC11_Action(signed char num)
- {
- if(mode==17)
- {
- mode0 += num; //演示變量 加減 編碼器正旋+1反旋減1
- }
- else if(mode==0)
- {
- fhz += num;
- }
- else if(mode==1)
- {
- mode1 += num;
- }
- else if(mode==2)
- {
- mode2 += num;
- }
- else if(mode==3)
- {
- mode3 += num;
- }
- else if(mode==4)
- {
- mode4 += num;
- }
- else if(mode==5)
- {
- mode5 += num;
- }
- else if(mode==6)
- {
- mode6 += num;
- }
- else if(mode==7)
- {
- mode7 += num;
- }
- else if(mode==8)
- {
- mode8 += num;
- }
- }
- /**********************EC11驅(qū)動函數(shù)**********************/
- void EC11_Driver() //放大循環(huán)里面
- {
- static bit turn_R; //檢測EC11正轉(zhuǎn)標(biāo)志位
- static bit turn_L; //檢測EC11反轉(zhuǎn)標(biāo)志位
- static bit turn_on; //檢測EC11動作標(biāo)志位
- static bit turn_on_last; //備份EC11上一次動作值
- /**********************EC11狀態(tài)分析**********************/
- if(EC11_A_Now&&!EC11_B_Now) //正轉(zhuǎn)狀態(tài)
- {
- turn_R = 1; //正轉(zhuǎn)標(biāo)志
- }
- else if(!EC11_A_Now&&EC11_B_Now) //反轉(zhuǎn)狀態(tài)
- {
- turn_L = 1; //反轉(zhuǎn)標(biāo)志
- }
- else if(!EC11_A_Now&&!EC11_B_Now) //旋轉(zhuǎn)狀態(tài)
- {
- turn_on = 1; //旋轉(zhuǎn)標(biāo)記
- }
- else //起始狀態(tài) 編碼器未旋轉(zhuǎn)
- { //或旋轉(zhuǎn)到起始狀態(tài)
- turn_on = 0; //旋轉(zhuǎn)標(biāo)志復(fù)位
- turn_R = 0; //正轉(zhuǎn)標(biāo)志復(fù)位
- turn_L = 0; //反轉(zhuǎn)標(biāo)志復(fù)位
- }
- /**********************EC11狀態(tài)處理**********************/
- if(turn_R) //判定為正轉(zhuǎn)狀態(tài) 進(jìn)行正轉(zhuǎn)處理
- {
- if(turn_on != turn_on_last) //如果編碼器轉(zhuǎn)動
- {
- if(turn_on_last == 0) //如果編碼器上次值為0
- { //則該當(dāng)前值為1
- EC11_Action(EC11_A_Code); //執(zhí)行動作函數(shù) 傳送正轉(zhuǎn)值
- }
- }
- turn_on_last = turn_on; //更新編碼器狀態(tài)
- }
- else if(turn_L) //判定為正轉(zhuǎn)狀態(tài) 反轉(zhuǎn)處理
- {
- if(turn_on != turn_on_last) //如果編碼器轉(zhuǎn)動
- {
- if(turn_on_last == 0) //如果編碼器上次值為0
- { //則該當(dāng)前值為1
- EC11_Action(EC11_B_Code); //執(zhí)行動作函數(shù) 傳送反轉(zhuǎn)值
- }
- }
- turn_on_last = turn_on; //更新編碼器狀態(tài)
- }
- else //不旋轉(zhuǎn)時復(fù)位
- {
- turn_on_last = 0; //編碼器最后動作狀態(tài)復(fù)位
- }
- }
- /******************EC11_IO狀態(tài)掃描及消抖*******************/
- void EC11_Scan() //放2ms定時器里面
- {
- static unsigned char EC11_A_Buf; //聲明靜態(tài)緩存變量
- static unsigned char EC11_B_Buf; //聲明靜態(tài)緩存變量
- EC11_A_Buf = ((EC11_A_Buf << 1) & 0x05) | EC11_A; //將編碼器IO狀態(tài)送入緩存 //可更改速度
- EC11_B_Buf = ((EC11_B_Buf << 1) & 0x05) | EC11_B; //連續(xù)三次都為0則判定為0 //可更改速度
- if(EC11_A_Buf == 0x00) //編碼器A引腳電平判定
- EC11_A_Now = 0;
- else //否則
- EC11_A_Now = 1;
- if(EC11_B_Buf == 0x00) //編碼器B引腳電平判定
- EC11_B_Now = 0;
- else //否則
- EC11_B_Now = 1;
- }
- //EC11結(jié)束
- void read_ds18b20_temp() //放2ms定時器里面掃描
- {
- static unsigned char ls,hs,i;
- switch(i)
- {
- case 0: init_ds18b20(); break;
- case 1: Write_DS18B20(0xcc); break;
- case 2: Write_DS18B20(0x44); break;
- case 94: init_ds18b20(); break;
- case 95: Write_DS18B20(0xcc); break;
- case 96: Write_DS18B20(0xbe); break;
- case 97: ls=Read_DS18B20(); break;
- case 98: hs=Read_DS18B20(); break;
- case 99: duqu=((hs<<8)|ls)/1.6*10; break;//保留2位小數(shù)
- //case 99: duqu=((hs<<4)&0xf0)|((ls>>4)&0x0f)*100; break;
- }
- i=++i%100;
- }
- void KEY() //按鍵
- {
- // uchar kk; //按鍵 0-255
- // if(mode<9) mode=0;
- {
- if(!k1) //設(shè)置加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k1) //再次判斷按鍵是否按下
- {
- i=0;
- if(mode<17)
- mode+=1;
- SendString("mode+1"); //輸出文本
- SendByte('1'); //輸出HEX 0x31
- set_voltage=(unsigned int)mode; //強(qiáng)制轉(zhuǎn)換uint輸出
- OLED_P8x16Str(0,2,35); //M
- OLED_P8x16Str(8,2,37); //O
- OLED_P8x16Str(16,2,26); //D
- OLED_P8x16Str(24,2,27); //E
- OLED_P8x16Str(32,2,10); //:
- Display2(); //更新輸出
- // writedat=1; //寫入24C08 的標(biāo)志;
- // printf("設(shè)置加:%u\r\n",(unsigned int)mode); //強(qiáng)制轉(zhuǎn)換成int數(shù)發(fā)送
- }
- }
- }
- if(!k4 ) //設(shè)置減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k4) //再次判斷按鍵是否按下
- {
- i=0;
- if(mode>0)
- mode-=1;
- SendString("mode-1");
- set_voltage=(unsigned int)mode; //強(qiáng)制轉(zhuǎn)換uint輸出
- Display2(); //更新輸出
- // writedat=1; //寫入24C08 的標(biāo)志;
- // printf("設(shè)置減:%u\r\n",(unsigned int)mode); //強(qiáng)制轉(zhuǎn)換成int數(shù)發(fā)送
- }
- }
- }
- if(!k5) //確認(rèn)
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k5) //再次判斷按鍵是否按下
- {
- writedat=1; //寫入24C08 的標(biāo)志;
- mode=0;
- // printf("保存eeprom成功\r\n");
- }
- }
- }
- if(mode==1)//模式1
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode1<65535) // 小于65535
- mode1++; //自加一次
- SendString("mode1+");
- set_voltage=mode1; //強(qiáng)制轉(zhuǎn)換uint輸出
- OLED_P8x16Str(0,4,35); //M
- OLED_P8x16Str(8,4,37); //O
- OLED_P8x16Str(16,4,26); //D
- OLED_P8x16Str(24,4,27); //E
- OLED_P8x16Str(32,4,1); //1
- OLED_P8x16Str(40,4,10); //:
- Display3(); //更新輸出
- // printf("mode1:%d\r\n",mode1);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode1>0) //判斷大于1
- mode1--; //自減一次
- SendString("mode1-");
- // printf("mode1:%d\r\n",mode1);
- }
- }
- }
- }
- if(mode==2)//模式2
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode2<65535) // 小于65535
- mode2++; //自加一次
- // printf("mode2:%d\r\n",mode2);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode2>0) //判斷大于1
- mode2--; //自減一次
- // printf("mode2:%d\r\n",mode2);
- }
- }
- }
- }
- if(mode==3)//模式3
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode3<65535) // 小于65535
- mode3++; //自加一次
- // printf("mode3:%d\r\n",mode3);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode3>0) //判斷大于1
- mode3--; //自減一次
- // printf("mode3:%d\r\n",mode3);
- }
- }
- }
- }
- if(mode==4)//模式4
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode4<65535) // 小于65535
- mode4++; //自加一次
- // printf("mode4:%d\r\n",mode4);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode4>0) //判斷大于1
- mode4--; //自減一次
- // printf("mode4:%d\r\n",mode4);
- }
- }
- }
- }
- if(mode==5)//模式5
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode5<65535) // 小于65535
- mode5++; //自加一次
- // printf("mode5:%d\r\n",mode5);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode5>0) //判斷大于1
- mode5--; //自減一次
- // printf("mode5:%d\r\n",mode5);
- }
- }
- }
- }
- if(mode==6)//模式6
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode6<65535) // 小于65535
- mode6++; //自加一次
- // printf("mode6:%d\r\n",mode6);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode6>0) //判斷大于1
- mode6--; //自減一次
- // printf("mode6:%d\r\n",mode6);
- }
- }
- }
- }
- if(mode==7)//模式7
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode7<65535) // 小于65535
- mode7++; //自加一次
- // printf("mode7:%d\r\n",mode7);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode7>0) //判斷大于1
- mode7--; //自減一次
- // printf("mode7:%d\r\n",mode7);
- }
- }
- }
- }
- if(mode==8)//模式8
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(mode8<65535) // 小于65535
- mode8++; //自加一次
- // printf("mode8:%d\r\n",mode8);
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(mode8>0) //判斷大于1
- mode8--; //自減一次
- // printf("mode8:%d\r\n",mode8);
- }
- }
- }
- }
- //////開始執(zhí)行
- if(mode==0) //模式0
- {
- if(!k2) //加
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k2) //再次判斷按鍵是否按下
- {
- if(fhz<mode1) // 判斷fhz小于mpde1
- fhz++; //自加一次
- Val=valdata/mode1*fhz; //基準(zhǔn)數(shù)5000/頻率上限*設(shè)置運行頻率=輸出
- MCP4725_WriteData(Val); //寫電壓單位V
- // printf("頻率:%uHz\n",(unsigned int)fhz); //打印頻率 //強(qiáng)制轉(zhuǎn)換成int數(shù)發(fā)送
- // printf("輸出電壓:%dMv\r\n",Val); //打印MCP4725電壓
- }
- }
- }
- if(!k3) //減
- {
- if(count1==key) //消除抖動計數(shù)5次大約10ms
- {
- if(!k3) //再次判斷按鍵是否按下
- {
- if(fhz>0) //判斷大于0
- fhz--; //自減一次
- Val=valdata/mode1*fhz; //基準(zhǔn)數(shù)5000/頻率上限*設(shè)置運行頻率=輸出
- MCP4725_WriteData(Val); //寫電壓單位V
- // printf("頻率:%uHz\n",(unsigned int)fhz); //打印頻率 //強(qiáng)制轉(zhuǎn)換成int數(shù)發(fā)送
- // printf("輸出電壓:%dMv\r\n",Val); //打印MCP4725電壓
- }
- }
- }
- }
- if(mode==9)//模式9
- {
- if(i==100) //開啟
- {
- i=0;
- volt1=ADC(1);//測量通道1
- volt1=volt1*500/127;
- volt2=ADC(2);//測量通道2
- volt2=volt2*500/127;
- /*
- SendString("table[volt1/100]+0x30");
- SendString(".");
- SendString("table[volt1%100/10]+0x30");
- SendString("table[volt1%10]+0x30");
- SendString("V");
- SendString("\r\n");
- SendString("table[volt2/100]+0x30");
- SendString(".");
- SendString("table[volt2%100/10]+0x30");
- SendString("table[volt2%10]+0x30");
- SendString("V");
- SendString("\r\n");
- */
- // printf("CH1:%gV\n",(float)volt1/100); //打印0832CH1電壓//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- // printf("CH2:%gV\r\n",(float)volt2/100); //打印0832CH2電壓//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- }
- }
- if(mode==10)//模式10
- {
- if(i==500) //開啟
- {
- // duqu=ds18b20_readTemp(); //讀18b20溫度值
- //duqu=rd_temperature_f();//調(diào)用DS18B20溫度采集程序:浮點數(shù)
- // duqu=duqu*0.0625*100+0.5;
- //duqu=duqu*100; //取1位小數(shù)
- //wendu=(unsigned int)x; //轉(zhuǎn)換為整形數(shù)值,由數(shù)碼管顯示
- set_voltage=duqu; //溫度輸出
- Display1();
- if(duqu<0)
- {
- duqu=~duqu+1;
- duqu+=1;
- //duqu=duqu*0.0625*100+0.5;
- dis_buf[1]=table[52];
- }
- else //if(kaiqi==1)
- {
- //duqu=duqu*0.0625*100+0.5;
- dis_buf[1]=table[55];
- }
- i=0;
- }
- }
- /*
- if(mode==11)//模式11
- {
- if(i==100) //開啟
- {
- i=0;
- run_time(); //時鐘走動函數(shù)定義
- //printf("xtsz.t15.txt=\"%d:%d:%d\"\xff\xff\xff",(unsigned int)hour,(unsigned int)minute,(unsigned int)second); //打印小時
- // printf("時間:%d-%d-%d\r\n",(unsigned int)hour,(unsigned int)minute,(unsigned int)second); //打印
- }
- }
- */
- if(mode==12)//模式12
- {
- if(i==100) //開啟
- {
- i=0;
- ADC0 = ADS1115_Read(0)*1000; //通道0
- // printf("ADS1115通道1:");
- // printf("%gmv\n",(float)ADC0/1000); //打印//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- }
- }
- if(mode==13)//模式13
- {
- if(i==100) //開啟
- {
- i=0;
- ADC1 = ADS1115_Read(1)*1000; //通道1
- // printf("ADS1115通道2:");
- // printf("%gmv\n",(float)ADC1/1000); //打印//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- }
- }
- if(mode==14)//模式14
- {
- if(i==100) //開啟
- {
- i=0;
- ADC2 = ADS1115_Read(2)*1000; //通道2
- // printf("ADS1115通道3:");
- // printf("%gmv\n",(float)ADC2/1000); //打印//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- }
- }
- if(mode==15)//模式15
- {
- if(i==100) //開啟
- {
- i=0;
- //ADC3 = (unsigned int)(ADS1115_Read(3)*1000); //通道3
- ADC3 = ADS1115_Read(3)*1000; //通道3
- // printf("ADS1115通道4:");
- // printf("%gmv\n",(float)ADC3/1000); //打印//強(qiáng)制轉(zhuǎn)換成float數(shù)發(fā)送使用%g不打印多的0
- }
- }
- if(k1 && k2 && k3 && k4 && k5 )
- {
- // kk=0;
- count1=0; //計數(shù)清零
- }
- }
- if(writedat==1) //寫入24C08 的標(biāo)志;
- {
- writedat=0; //清除寫入24C08 的標(biāo)志;
- num1=(uchar)(mode1/256);
- num2=(uchar)(mode1%256); //num1和num2是將up的0-65535計算成兩個255分別存儲的變量
- num3=(uchar)(mode2/256);
- num4=(uchar)(mode2%256); //num3和num4是將down的0-65535計算成兩個255分別存儲的變量
- num5=(uchar)(mode3/256);
- num6=(uchar)(mode3%256); //num5和num6是將up的0-65535計算成兩個255分別存儲的變量
- num7=(uchar)(mode4/256);
- num8=(uchar)(mode4%256); //num7和num8是將down的0-65535計算成兩個255分別存儲的變量
- num9=(uchar)(mode5/256);
- num10=(uchar)(mode5%256); //num9和num10是將up的0-65535計算成兩個255分別存儲的變量
- num11=(uchar)(mode6/256);
- num12=(uchar)(mode6%256); //num11和num12是將down的0-65535計算成兩個255分別存儲的變量
- num13=(uchar)(mode7/256);
- num14=(uchar)(mode7%256); //num13和num14是將up的0-65535計算成兩個255分別存儲的變量
- num15=(uchar)(mode8/256);
- num16=(uchar)(mode8%256); //num15和num16是將down的0-65535計算成兩個255分別存儲的變量
- write(0xa0,0x01,num1); //地址1寫入0-255
- delay1(10);
- write(0xa0,0x02,num2); //地址2寫入0-255
- delay1(10);
- write(0xa0,0x03,num3); //地址3寫入0-255
- delay1(10);
- write(0xa0,0x04,num4); //地址4寫入0-255
- delay1(10);
- write(0xa0,0x05,num5); //地址5寫入0-255
- delay1(10);
- write(0xa0,0x06,num6); //地址6寫入0-255
- delay1(10);
- write(0xa0,0x07,num7); //地址7寫入0-255
- delay1(10);
- write(0xa0,0x08,num8); //地址8寫入0-255
- delay1(10);
- write(0xa0,0x09,num9); //地址9寫入0-255
- delay1(10);
- write(0xa0,0x10,num10); //地址10寫入0-255
- delay1(10);
- write(0xa0,0x11,num11); //地址11寫入0-255
- delay1(10);
- write(0xa0,0x12,num12); //地址12寫入0-255
- delay1(10);
- write(0xa0,0x13,num13); //地址13寫入0-255
- delay1(10);
- write(0xa0,0x14,num14); //地址14寫入0-255
- delay1(10);
- write(0xa0,0x15,num15); //地址15寫入0-255
- delay1(10);
- write(0xa0,0x16,num16); //地址16寫入0-255
- delay1(10);
- }
- switch(mode) //模式
- {
- case 0: //主顯示
- {
- if(flag1s) //1s定時標(biāo)志
- {
- dis_buf[0]=table[46];//顯示千萬位
- dis_buf[1]=table[Val/1000]+0x80;//顯示百萬位 +0x80就是顯示有小數(shù)點
- dis_buf[2]=table[Val%1000/100];//顯示十萬位
- dis_buf[3]=table[Val%100/10];//顯示萬位
- dis_buf[4]=table[Val%10];//顯示千位
- dis_buf[5]=table[20];//顯示百位
- dis_buf[6]=table[fhz/10];//顯示十位
- dis_buf[7]=table[fhz%10];//顯示個位
- }
- else
- {
- dis_buf[6]=table[55];//顯示十位
- dis_buf[7]=table[55];//顯示個位
- }
- } break;
- case 1: //菜單1
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[1];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode1/10000];//顯示萬位
- dis_buf[4]=table[mode1%10000/1000];//顯示千位
- dis_buf[5]=table[mode1%1000/100];//顯示百位
- dis_buf[6]=table[mode1%100/10];//顯示十位
- dis_buf[7]=table[mode1%10]; //顯示個位
- }break;
- case 2: //菜單2
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[2];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode2/10000];//顯示萬位
- dis_buf[4]=table[mode2%10000/1000];//顯示千位
- dis_buf[5]=table[mode2%1000/100];//顯示百位
- dis_buf[6]=table[mode2%100/10];//顯示十位
- dis_buf[7]=table[mode2%10]; //顯示個位
- }break;
- case 3: //菜單3
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[3];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode3/10000];//顯示萬位
- dis_buf[4]=table[mode3%10000/1000];//顯示千位
- dis_buf[5]=table[mode3%1000/100];//顯示百位
- dis_buf[6]=table[mode3%100/10];//顯示十位
- dis_buf[7]=table[mode3%10]; //顯示個位
- }break;
- case 4: //菜單4
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[4];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode4/10000];//顯示萬位
- dis_buf[4]=table[mode4%10000/1000];//顯示千位
- dis_buf[5]=table[mode4%1000/100];//顯示百位
- dis_buf[6]=table[mode4%100/10];//顯示十位
- dis_buf[7]=table[mode4%10]; //顯示個位
- }break;
- case 5: //菜單5
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[5];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode5/10000];//顯示萬位
- dis_buf[4]=table[mode5%10000/1000];//顯示千位
- dis_buf[5]=table[mode5%1000/100];//顯示百位
- dis_buf[6]=table[mode5%100/10];//顯示十位
- dis_buf[7]=table[mode5%10]; //顯示個位
- }break;
- case 6: //菜單6
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[6];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode6/10000];//顯示萬位
- dis_buf[4]=table[mode6%10000/1000];//顯示千位
- dis_buf[5]=table[mode6%1000/100];//顯示百位
- dis_buf[6]=table[mode6%100/10];//顯示十位
- dis_buf[7]=table[mode6%10]; //顯示個位
- }break;
- case 7: //菜單7
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[7];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode7/10000];//顯示萬位
- dis_buf[4]=table[mode7%10000/1000];//顯示千位
- dis_buf[5]=table[mode7%1000/100];//顯示百位
- dis_buf[6]=table[mode7%100/10];//顯示十位
- dis_buf[7]=table[mode7%10]; //顯示個位
- }break;
- case 8: //菜單8
- {
- dis_buf[0]=table[36];//顯示千萬位
- dis_buf[1]=table[8];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[mode8/10000];//顯示萬位
- dis_buf[4]=table[mode8%10000/1000];//顯示千位
- dis_buf[5]=table[mode8%1000/100];//顯示百位
- dis_buf[6]=table[mode8%100/10];//顯示十位
- dis_buf[7]=table[mode8%10]; //顯示個位
- }break;
- case 9: //菜單9
- {
- dis_buf[0]=table[volt1/100]+0x80;//顯示千萬位
- dis_buf[1]=table[volt1%100/10];//顯示百萬位
- dis_buf[2]=table[volt1%10];//顯示十萬位
- dis_buf[3]=table[46];//顯示萬位
- dis_buf[4]=table[volt2/100]+0x80;//顯示千位
- dis_buf[5]=table[volt2%100/10];//顯示百位
- dis_buf[6]=table[volt2%10];//顯示十位
- dis_buf[7]=table[46]; //顯示個位
- }break;
- case 10: //菜單10
- {
- dis_buf[0]=table[55];//顯示千萬位
- // dis_buf[1]=table[55];//顯示百萬位
- dis_buf[2]=table[duqu/10000];//顯示十萬位
- dis_buf[3]=table[duqu%10000/1000];//顯示萬位
- dis_buf[4]=table[duqu%1000/100]+0x80;//顯示千位
- dis_buf[5]=table[duqu%100/10];//顯示百位
- dis_buf[6]=table[duqu%10];//顯示十位
- dis_buf[7]=table[15]; //顯示個位
- }break;
- case 11: //菜單11
- {
- dis_buf[0]=table[hour/10];//顯示千萬位
- dis_buf[1]=table[hour%10];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[minute/10];//顯示萬位
- dis_buf[4]=table[minute%10];//顯示千位
- dis_buf[5]=table[52];//顯示百位
- dis_buf[6]=table[second/10];//顯示十位
- dis_buf[7]=table[second%10]; //顯示個位
- }break;
- case 12: //菜單12
- {
- dis_buf[0]=table[36]; //顯示千萬位
- dis_buf[1]=table[1]; //顯示百萬位
- dis_buf[2]=table[2]; //顯示十萬
- dis_buf[3]=table[52]; //顯示萬位
- dis_buf[4]=table[ADC0/1000]+0x80; //顯示千位
- dis_buf[5]=table[ADC0%1000/100]; //顯示百位
- dis_buf[6]=table[ADC0%100/10]; // 顯示十位
- dis_buf[7]=table[ADC0%10]; //顯示個位
- }break;
- case 13: //菜單13
- {
- dis_buf[0]=table[36]; //顯示千萬位
- dis_buf[1]=table[1]; //顯示百萬位
- dis_buf[2]=table[3]; //顯示十萬
- dis_buf[3]=table[52]; //顯示萬位
- dis_buf[4]=table[ADC1/1000]+0x80; //顯示千位
- dis_buf[5]=table[ADC1%1000/100]; //顯示百位
- dis_buf[6]=table[ADC1%100/10]; // 顯示十位
- dis_buf[7]=table[ADC1%10]; //顯示個位
- }break;
- case 14: //菜單14
- {
- dis_buf[0]=table[36]; //顯示千萬位
- dis_buf[1]=table[1]; //顯示百萬位
- dis_buf[2]=table[4]; //顯示十萬
- dis_buf[3]=table[52]; //顯示萬位
- dis_buf[4]=table[ADC2/1000]+0x80; //顯示千位
- dis_buf[5]=table[ADC2%1000/100]; //顯示百位
- dis_buf[6]=table[ADC2%100/10]; // 顯示十位
- dis_buf[7]=table[ADC2%10]; //顯示個位
- }break;
- case 15: //菜單15
- {
- dis_buf[0]=table[36]; //顯示千萬位
- dis_buf[1]=table[1]; //顯示百萬位
- dis_buf[2]=table[5]; //顯示十萬
- dis_buf[3]=table[52]; //顯示萬位
- dis_buf[4]=table[ADC3/1000]+0x80; //顯示千位
- dis_buf[5]=table[ADC3%1000/100]; //顯示百位
- dis_buf[6]=table[ADC3%100/10]; // 顯示十位
- dis_buf[7]=table[ADC3%10]; //顯示個位
- }break;
- case 16: //菜單12
- {
- dis_buf[0]=table[h/10];//顯示千萬位
- dis_buf[1]=table[h%10];//顯示百萬位
- dis_buf[2]=table[52];//顯示十萬位
- dis_buf[3]=table[m/10];//顯示萬位
- dis_buf[4]=table[m%10];//顯示千位
- dis_buf[5]=table[52];//顯示百位
- dis_buf[6]=table[s/10];//顯示十位
- dis_buf[7]=table[s%10]; //顯示個位
- }break;
- case 17: //菜單17
- {
- dis_buf[0]=table[18];//顯示千萬位
- dis_buf[1]=table[14];//顯示百萬位
- //dis_buf[2]=table[7]+0x80;//顯示十萬位
- dis_buf[3]=table[mode0/10000];//顯示萬位
- dis_buf[4]=table[mode0%10000/1000];//顯示千位
- dis_buf[5]=table[mode0%1000/100];//顯示百位
- dis_buf[6]=table[mode0%100/10];//顯示十位
- dis_buf[7]=table[mode0%10]; //顯示個位
- }break;
- } //default: 如果表達(dá)式的值和以上的case后面的值都沒有匹配上,那么就執(zhí)行這里的代碼。
- }
- void display595out() //595數(shù)碼管輸出
- {
- //display595();
- DisplayScan();
- }
- void duqu24cxx()
- {
- if(rst==1) //判斷如果等于高電平那么就執(zhí)行讀取數(shù)據(jù),如果不是那么就不讀取數(shù)據(jù)同時存儲的數(shù)據(jù)會清零
- {
- num1 = read(0xa0,0x01,0xa1); //地址1讀出0-255
- delay1(10); //適當(dāng)延時
- num2 = read(0xa0,0x02,0xa1); //地址2讀出0-255
- delay1(10); //適當(dāng)延時
- num3 = read(0xa0,0x03,0xa1); //地址3讀出0-255
- delay1(10); //適當(dāng)延時
- num4 = read(0xa0,0x04,0xa1); //地址4讀出0-255
- delay1(10); //適當(dāng)延時
- num5 = read(0xa0,0x05,0xa1); //地址5讀出0-255
- delay1(10); //適當(dāng)延時
- num6 = read(0xa0,0x06,0xa1); //地址6讀出0-255
- delay1(10); //適當(dāng)延時
- num7 = read(0xa0,0x07,0xa1); //地址7讀出0-255
- delay1(10); //適當(dāng)延時
- num8 = read(0xa0,0x08,0xa1); //地址8讀出0-255
- delay1(10); //適當(dāng)延時
- num9 = read(0xa0,0x09,0xa1); //地址9讀出0-255
- delay1(10); //適當(dāng)延時
- num10 = read(0xa0,0x10,0xa1); //地址10讀出0-255
- delay1(10); //適當(dāng)延時
- num11 = read(0xa0,0x11,0xa1); //地址11讀出0-255
- delay1(10); //適當(dāng)延時
- num12 = read(0xa0,0x12,0xa1); //地址12讀出0-255
- delay1(10); //適當(dāng)延時
- num13 = read(0xa0,0x13,0xa1); //地址13讀出0-255
- delay1(10); //適當(dāng)延時
- num14 = read(0xa0,0x14,0xa1); //地址14讀出0-255
- delay1(10); //適當(dāng)延時
- num15 = read(0xa0,0x15,0xa1); //地址15讀出0-255
- delay1(10); //適當(dāng)延時
- num16 = read(0xa0,0x16,0xa1); //地址16讀出0-255
- delay1(10); //適當(dāng)延時
- mode1 = num1*256 + num2; //計算還原成0-65535
- mode2 = num3*256 + num4; //計算還原成0-65535
- mode3 = num5*256 + num6; //計算還原成0-65535
- mode4 = num7*256 + num8; //計算還原成0-65535
- mode5 = num9*256 + num10; //計算還原成0-65535
- mode6 = num11*256 + num12; //計算還原成0-65535
- mode7 = num13*256 + num14; //計算還原成0-65535
- mode8 = num15*256 + num16; //計算還原成0-65535
- }
- else if(rst==0)
- {
- num1=(uchar)(mode1/256);
- num2=(uchar)(mode1%256); //num1和num2是將up的0-65535計算成兩個255分別存儲的變量
- num3=(uchar)(mode2/256);
- num4=(uchar)(mode2%256); //num3和num4是將down的0-65535計算成兩個255分別存儲的變量
- num5=(uchar)(mode3/256);
- num6=(uchar)(mode3%256); //num5和num6是將up的0-65535計算成兩個255分別存儲的變量
- num7=(uchar)(mode4/256);
- num8=(uchar)(mode4%256); //num7和num8是將down的0-65535計算成兩個255分別存儲的變量
- num9=(uchar)(mode5/256);
- num10=(uchar)(mode5%256); //num9和num10是將up的0-65535計算成兩個255分別存儲的變量
- num11=(uchar)(mode6/256);
- num12=(uchar)(mode6%256); //num11和num12是將down的0-65535計算成兩個255分別存儲的變量
- num13=(uchar)(mode7/256);
- num14=(uchar)(mode7%256); //num13和num14是將up的0-65535計算成兩個255分別存儲的變量
- num15=(uchar)(mode8/256);
- num16=(uchar)(mode8%256); //num15和num16是將down的0-65535計算成兩個255分別存儲的變量
- write(0xa0,0x01,num1); //地址1寫入0-255
- delay1(10);
- write(0xa0,0x02,num2); //地址2寫入0-255
- delay1(10);
- write(0xa0,0x03,num3); //地址3寫入0-255
- delay1(10);
- write(0xa0,0x04,num4); //地址4寫入0-255
- delay1(10);
- write(0xa0,0x05,num5); //地址5寫入0-255
- delay1(10);
- write(0xa0,0x06,num6); //地址6寫入0-255
- delay1(10);
- write(0xa0,0x07,num7); //地址7寫入0-255
- delay1(10);
- write(0xa0,0x08,num8); //地址8寫入0-255
- delay1(10);
- write(0xa0,0x09,num9); //地址9寫入0-255
- delay1(10);
- write(0xa0,0x10,num10); //地址10寫入0-255
- delay1(10);
- write(0xa0,0x11,num11); //地址11寫入0-255
- delay1(10);
- write(0xa0,0x12,num12); //地址12寫入0-255
- delay1(10);
- write(0xa0,0x13,num13); //地址13寫入0-255
- delay1(10);
- write(0xa0,0x14,num14); //地址14寫入0-255
- delay1(10);
- write(0xa0,0x15,num15); //地址15寫入0-255
- delay1(10);
- write(0xa0,0x16,num16); //地址16寫入0-255
- delay1(10);
- }
- }
- void ds1307duqu()
- {
- /*
- //初始化寫入數(shù)碼管的時分秒
- second=55;
- minute=59;
- hour=01;
- b_second=dectobcd(second);
- b_minute=dectobcd(minute);
- b_hour=dectobcd(hour);
- //將所調(diào)的時間向時鐘寫入
- write_1307(0xd0,0,b_hour);
- write_1307(0xd0,2,b_minute);
- write_1307(0xd0,1,b_second);
- //初始化ds1307
- write_1307(0xd0,0x07,0x10);//初始化1307的控制字,使其SOUT引腳輸出1Hz的方波。
- //初始化1307的時間/*
- write_1307(0xd0,6,0x07);
- write_1307(0xd0,5,0x11);
- write_1307(0xd0,4,0x24);
- write_1307(0xd0,3,0x04);
- write_1307(0xd0,2,0x00);
- write_1307(0xd0,1,0x00);
- write_1307(0xd0,0,0x00);
- */
- /* //初始化寫入數(shù)碼管的時分秒
- second=55;
- minute=59;
- hour=01;
- b_second=dectobcd(second);
- b_minute=dectobcd(minute);
- b_hour=dectobcd(hour);
- //將所調(diào)的時間向時鐘寫入
- ds1307_write_date(0xd0,0,b_hour);
- ds1307_write_date(0xd0,2,b_minute);
- ds1307_write_date(0xd0,1,b_second);
- */
- /*
- //初始化ds1307
- ds1307_write_date(0xd0,0x07,0x10);//初始化1307的控制字,使其SOUT引腳輸出1Hz的方波。
- //初始化1307的時間/*
- ds1307_write_date(0xd0,6,0x07);
- ds1307_write_date(0xd0,5,0x11);
- ds1307_write_date(0xd0,4,0x24);
- ds1307_write_date(0xd0,3,0x04);
- ds1307_write_date(0xd0,2,0x23); //
- ds1307_write_date(0xd0,1,0x55); //
- ds1307_write_date(0xd0,0,0x00); //
- */
- }
- void init() //初始化
- {
- MCP4725_WriteData(0);//掉電不保存數(shù)據(jù)
- duqu24cxx(); //讀出24cxx存儲的數(shù)據(jù)
- ds1307duqu();//寫入DS1307數(shù)據(jù)
- Timer0Init(); //定時器初始化
- SerialInit(); //串口初始化
- OLED_Init();
- OLED_CLS();
- // OLED_P32x64Str(0,0,2); //
- OLED_hzStr(0,0,2); //數(shù)
- OLED_hzStr(16,0,3); //字
- OLED_hzStr(32,0,0); //電
- OLED_hzStr(48,0,1); //壓
- OLED_hzStr(64,0,4); //源
- OLED_P8x16Str(80,0,13); //
- OLED_P8x16Str(88,0,0); //
- OLED_P8x16Str(96,0,0); //
- OLED_P8x16Str(104,0,0); //
- OLED_P8x16Str(112,0,0); //
- OLED_P8x16Str(120,0,49); //
- Display1(); //更新輸出
- set_voltage=(unsigned int)mode; //強(qiáng)制轉(zhuǎn)換uint輸出
- OLED_P8x16Str(0,2,35); //M
- OLED_P8x16Str(8,2,37); //O
- OLED_P8x16Str(16,2,26); //D
- OLED_P8x16Str(24,2,27); //E
- OLED_P8x16Str(32,2,10); //:
- Display2(); //更新輸出
- // OLED_hzStr(96,4,7); //實
- // OLED_hzStr(112,4,8); //際
- // OLED_hzStr(96,6,5); //設(shè)
- // OLED_hzStr(112,6,6); //定
- }
- void main()
- {
- init();
- // printf("初始化完成...\r\n"); //初始化完成后串口發(fā)出
- SendString("初始化完成...\r\n");//初始化完成后串口發(fā)出
- while(1)
- {
- //display595out(); //595數(shù)碼管顯示
- KEY(); //按鍵處理
- EC11_Driver(); //EC11編碼器驅(qū)動函數(shù)
- }
- }
- //定時器中斷
- void time0() interrupt 1 //初始值大概2毫秒
- {
- static uint tcount;
- static uint tcount2;
- //TH0=(65536-2000)/256;//2ms
- //TL0=(65536-2000)%256;//2ms
- TH0=(65536-1920)/256;//2ms
- TL0=(65536-1920)%256;//2ms
- tcount++;
- count1++;
- tcount2++;
- i++;
- if(tcount==500)
- {
- tcount=0;
- s++;
- if(s==60)
- {
- s=0;
- m++;
- if(m==60)
- {
- m=0;
- h++;
- if(h==24)
- {
- h=0;
- }
- }
- }
- run_time(); //時鐘走動函數(shù)定義
- led=~led; //狀態(tài)燈1秒一次
- }
- if(tcount2==250)
- {
- flag1s=!flag1s; //1s定時標(biāo)志
- tcount2=0;
- }
- display595out(); //595數(shù)碼管顯示
- EC11_Scan(); //EC11編碼器掃描
- read_ds18b20_temp(); //ds18b20溫度讀取
- }
復(fù)制代碼
|
|