自己制作的一個隔離下載器,順便做了一個時鐘顯示,分享出來 大家一起來研究學習,由于我的DS12C887內部電池壞了,所以不得以拆開做了一個外科手術,換了一個電池,內部原來的晶振就是這種,其實也是挺簡單的,外殼使用的是8838殼子,T12電烙鐵專用的,看這個盒子挺漂亮的就配套做了一個,用光耦隔離了TXD和RXD,輸出的時候就不用調換線了,光耦已經轉換過來了.兩個撥碼器是用來轉換外部下載和板子自身的89C52下載程序調試用的,后面的琴鍵開關是切換電源用的,可以使用USB的5V輸出,也可以從后面的兩個DC座子給需要下載的板子芯片供電.帶冷啟動功能,原理是串口下載時CH340G的RTS引腳會變低電平,單片機只需要檢測這個引腳的電平變化就可以了,缺點是使用串口調試時也回觸發一次冷啟動
另外提示一下,有些人搞不明白列地址的高位和低位,低位地址是00H~0FH,也就是1-16,最多也就只能定位到16列,而一塊屏幕有128列,而高位地址是10H~1FH,高位地址+低位地址就能準確定位到128列了,當然SSD1306不只應用在12864上,(0~127)/16就是高位地址,(0~127)%16就是低位地址,和定時器的初值一個意思,我是這么理解的,如有不對,歡迎指正
截圖20220430211502.jpg (310.53 KB, 下載次數: 62)
下載附件
2022-4-30 21:55 上傳
51hei圖片_20220430212309.jpg (206.75 KB, 下載次數: 65)
下載附件
2022-4-30 21:55 上傳
51hei圖片_20220430212330.jpg (222.98 KB, 下載次數: 77)
下載附件
2022-4-30 21:55 上傳
51hei圖片_20220430212356.jpg (214.66 KB, 下載次數: 74)
下載附件
2022-4-30 21:55 上傳
51hei圖片_20220430212408.jpg (130.63 KB, 下載次數: 67)
下載附件
2022-4-30 21:55 上傳
51hei圖片_20220430212421.jpg (106.99 KB, 下載次數: 76)
下載附件
2022-4-30 21:55 上傳
電路原理圖如下:
51hei.png (101.17 KB, 下載次數: 84)
下載附件
2022-5-1 03:50 上傳
單片機源程序如下:- #include<STC89C5xRC.H>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit SDA=P1^1;
- sbit SCL=P1^0;
- sbit RW=P2^5;
- sbit AS=P2^3;
- sbit CS=P2^4;
- sbit DS=P2^6;
- sbit km=P2^2;
- sbit jia=P2^1;
- sbit qh=P2^0;
- sbit k=P1^4;
- sbit RTS=P3^6;
- sbit j1=P1^7;
- sbit j2=P1^5;
- sbit led=P1^3;
- uchar t,tt;
- uchar smiao;
- bit ts;
- uchar code num[10][48]={
- {0x00,0x00,0x00,0x80,0xE0,0xF0,0x78,0x38,0x18,0x38,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0E,0x0C,0x0E,0x07,0x07,0x03,0x00,0x00,0x00},/*"0",0*/
- {0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",0*/
- {0x00,0x00,0x00,0xC0,0xF0,0xF0,0x38,0x18,0x18,0x38,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x7C,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x07,0x07,0x07,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00},/*"2",0*/
- {0x00,0x00,0x00,0xC0,0xE0,0xF0,0x38,0x18,0x18,0x18,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x0C,0x0C,0x1C,0x3F,0xFF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x0C,0x0E,0x07,0x07,0x03,0x00,0x00,0x00},/*"3",0*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8,0xFC,0xDF,0xC7,0xC3,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00},/*"4",0*/
- {0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x80,0x8E,0x8F,0x0F,0x06,0x02,0x06,0x06,0x9E,0xFE,0xFC,0x60,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0C,0x0C,0x0C,0x0E,0x07,0x07,0x03,0x00,0x00,0x00},/*"5",0*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x78,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,0x0F,0x07,0x06,0x06,0x0E,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x0C,0x0C,0x0E,0x07,0x07,0x01,0x00,0x00},/*"6",0*/
- {0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xD0,0xF0,0xF0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0x7F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"7",0*/
- {0x00,0x00,0x00,0xC0,0xF0,0xF0,0x38,0x18,0x18,0x18,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xFF,0xFF,0x1E,0x0C,0x0C,0x1E,0x1F,0xFF,0xF3,0xE0,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0E,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x01,0x00,0x00},/*"8",0*/
- {0x00,0x00,0x00,0xE0,0xF0,0xF0,0x38,0x18,0x18,0x38,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1E,0x38,0xB0,0xF0,0xF8,0xFF,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0E,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",0*/
- };
- uchar code mao[ ]={0x00,0x00,0x60,0xF0,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,0x0F,0x06,0x00,0x00};//"::::"
- uchar code tuo[ ]={0x10,0x10,0x10,0x10,0x38,0x38,0x38,0x38,0x7C,0x7C,0x7C,0x7C,0xFE,0xFE,0xFE,0xFE,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x7F,0x7F,0x7F,0x7F,0x3E,0x3E,0x3E,0x3E,0x1C,0x1C,0x1C,0x1C,0x08,0x08,0x08,0x08};/*"<-->",0*/
- uchar code zi[3][88]={
- {0xFF,0x01,0x01,0xF9,0xF9,0x19,0xD9,0x99,0x19,0x99,0xD9,0x19,0x81,0xE1,0xF9,0xDD,0xC1,0xC1,0xC1,0xC1,0xC1,0x01,0x01,0x01,0x01,0xF9,0xF9,0x19,0x99,0xD9,0x79,0x09,0x01,0xF1,0xF1,0x31,0x31,0x31,0x31,0xF1,0xF1,0x11,0x01,0x01,0x01,0x01,0x01,0x01,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x31,0x31,0x31,0x31,0x31,0x31,0xF1,0xF1,0x31,0x31,0x31,0x31,0x39,0x39,0x01,0x01,0x01,0x01,0x01,0xFF},
- {0xFF,0x00,0x00,0xFF,0xFF,0x00,0xE1,0x79,0x1F,0x1F,0xF1,0x60,0x01,0x81,0xE0,0x7C,0x7E,0xC6,0x80,0x03,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0x82,0x83,0xCE,0xFE,0x60,0x00,0xFF,0xFF,0x18,0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x86,0xC6,0xE6,0x76,0x1E,0x06,0x06,0x06,0x46,0xC6,0x86,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0C,0x0C,0xCC,0x6C,0x3F,0x0F,0x1C,0x6C,0xCC,0x8C,0x0C,0x0C,0x0E,0x0C,0x00,0x00,0x00,0xFF},
- {0xFF,0x80,0x80,0x8F,0x8F,0x8C,0x8C,0x8C,0x8C,0x8C,0x80,0x8C,0x8E,0x83,0x81,0x80,0x80,0x81,0x83,0x86,0x8C,0x88,0x80,0x80,0x80,0xBF,0xBF,0x81,0x81,0x80,0x80,0x80,0x80,0x8F,0x87,0x86,0x86,0x86,0x86,0x87,0x8F,0x80,0x80,0x80,0x80,0x90,0x98,0x8C,0x8F,0x8F,0x8D,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8D,0x8F,0x9C,0x98,0x90,0x80,0x80,0x90,0x98,0x98,0x8C,0x86,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x83,0x87,0x84,0x8C,0x9C,0x98,0x90,0x80,0xFF},
- };
- uchar code zizuo[2 ][32]={
- {0x00,0x60,0x78,0x58,0x50,0xFC,0xFC,0x50,0x50,0x40,0xF0,0xF0,0x00,0xFC,0xFC,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x4C,0x60,0x38,0x1C,0xF4,0xF0,0x10,0x90,0x90,0x90,0x10},
- {0x00,0x00,0x1F,0x1F,0x01,0x3F,0x3F,0x19,0x1F,0x07,0x07,0x07,0x20,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x3F,0x3F,0x09,0x09,0x0C,0x04,0x00},
- };
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=115;y>0;y--);
- }
- void start( )
- {
- SCL = 1;
- SDA = 1;
- SDA = 0;
- _nop_( );
- _nop_( );
- SCL = 0;
- _nop_( );
- _nop_( );
- }
- void stop( )
- {
- SCL=0;
- SDA=0;
- _nop_( );
- SCL=1;
- _nop_( );
- SDA=1;
- _nop_( );
- }
- void writebyte(uchar date)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- date<<=1;
- SDA=CY;
- SCL=1;
- _nop_( );
- _nop_( );
- SCL=0;
- _nop_( );
- _nop_( );
- }
- SDA=1;
- SCL=1;
- _nop_( );
- SCL=0;
- }
- void writedat(uchar date1)
- {
- start();
- writebyte(0x78);
- writebyte(0x40); //write data
- writebyte(date1);
- stop();
- }
- void writecomd(uchar comd)
- {
- start();
- writebyte(0x78);
- writebyte(0x00); //寫指令
- writebyte(comd);
- stop();
- //led=~led;
- }
- void initoled( )
- {
- uchar x,y;
- writecomd(0xae); //--關閉oled面板
- writecomd(0x00); //---設置低列地址
- writecomd(0x10); //---設置高列地址
- writecomd(0x40); //--設置起始行地址設置映射RAM顯示起始行 (0x00~0x3F)
- writecomd(0x81); //--設置對比度控制寄存器
- writecomd(0xFF); // 設置SEG輸出電流亮度
- writecomd(0xa1); //--設置SEG/列映射 0xa0左右反置 0xa1正常
- writecomd(0xc8); //設置COM/行掃描方向 0xc0上下反置 0xc8正常
- writecomd(0xa6); //--設置正常顯示
- writecomd(0xa8); //--設置多路復用率(1 to 64)
- writecomd(0x3f); //--1/64 duty
- writecomd(0xd3); //-設置顯示偏移 移位映射RAM計數器 (0x00~0x3F)
- writecomd(0x00); //-不抵消
- writecomd(0xd5); //--設置顯示時鐘分頻比/振蕩器頻率
- writecomd(0x80); //--設置分頻比,將時鐘設置為100幀/秒
- writecomd(0xd9); //--設定預充電時間
- writecomd(0xf1); //將預充電設置為15個時鐘,放電設置為1個時鐘
- writecomd(0xda); //--設置com引腳硬件配置
- writecomd(0x12);
- writecomd(0xdb); //--set vcomh
- writecomd(0x30); //設置VCOM取消選擇級別
- writecomd(0x20); //-設置頁面尋址模式 (0x00/0x01/0x02)
- writecomd(0x02); //
- writecomd(0x8d); //--設置電荷泵啟用/禁用
- writecomd(0x14); //--set(0x10) 使能
- writecomd(0xa4); // 在屏幕上禁用整個顯示 (0xa4/0xa5)
- writecomd(0xa6); // 禁用反轉顯示打開 (0xa6/a7)
- for(x=0;x<8;x++)
- {
- writecomd(0xb0+x);
- writecomd(0x00);
- writecomd(0x10);
- for(y=0;y<128;y++)
- {
- writedat(0x00); //清屏
- }
- }
- writecomd(0xaf); //--打開oled面板 //先清屏再開顯示,否則容易顯示斷電前上一次的圖像
- }
- void display( )
- {
- uchar x1,y1;
- for(y1=0;y1<8;y1++)
- {
- writecomd(0xb0+y1);
- writecomd(0x00);
- writecomd(0x10);
- for(x1=0;x1<128;x1++)
- {
- if(y1==0)
- {
- if(x1<2||x1>125)
- writedat(0xff);
- else
- writedat(0x03);
- }
- if(y1>0&&y1<7)
- {
- if(x1<2||x1>125)
- writedat(0xff);
- else
- writedat(0x00);
- }
- if(y1==7)
- {
- if(x1<2||x1>125)
- writedat(0xff);
- else
- writedat(0xc0);
- }
- }
- }
- }
- void writezi(bit s,uchar addrs,uchar nu) //寫入一個數字24*16 正常/反白顯示 列地址(0~127) 數據
- {
- uchar i,j;
- uchar n=0;
- for(j=0;j<3;j++)
- {
- writecomd(0xb2+j); //循環三次+起始頁,需要3個頁面顯示16*24數字 固定顯示從第2頁開始
- writecomd(0x00+(addrs%16)); //起始地址低位 00H~0FH
- writecomd(0x10+(addrs/16)); //起始地址高位 10H~1FH
- if(nu<10) //小于10為數字
- {
- for(i=0;i<16;i++)
- {
- if(s==0)
- {
- writedat(num[nu][n]); //調用數字表格 ,正常顯示
- }
- if(s==1)
- {
- writedat(~(num[nu][n])); //調用數字表格,反白顯示
- }
- n++; //一組數字表格為48字節,單獨用一個數字記錄,for循環結束時N不被清零,第二次for循環時才能從第17個數字開始調用
- }
- }
- else //否則為冒號
- {
- if(nu==10) //=10用冒號
- {
- for(i=0;i<8;i++)
- {
- writedat(mao[n]); //調用冒號表格
- n++;
- }
- }
- else //否則清除冒號顯示
- {
- for(i=0;i<8;i++)
- {
- writedat(0x00); //空白顯示,即擦除冒號
- n++;
- }
- }
- }
- }
- }
- void tuoji(bit b) //脫機標志
- {
- uchar i;
- writecomd(0xb6);
- writecomd(0x04);
- writecomd(0x12);
- if(b==0) //1 顯示脫機標志
- {
- for(i=0;i<56;i++)
- {
- writedat(tuo[i]);
- }
- }
- if(b==1) //0 清除脫機標志
- {
- for(i=0;i<56;i++)
- {
- writedat(0x00);
- }
- }
- }
- void writetime(uchar add,uchar date) // 地址 數據 P0口數據
- {
- CS=0; //片選
- DS=1;
- RW=1;
- AS=1;
- P0=add;
- _nop_();
- AS=0;
- RW=0;
- P0=date;
- _nop_();
- RW=1;
- AS=1;
- CS=1;
- }
- uchar readtime(uchar add) //讀數據
- {
- uchar a;
- CS=0;
- RW=1;
- DS=1;
- AS=1;
- P0=add;
- AS=0;
- DS=0;
- P0=0xff;
- _nop_();
- a=P0;
- DS=1;
- AS=1;
- CS=1;
- return a;
- }
- /*9void inittime( )
- {
- writetime(0X0A,0X20); //開啟時鐘振蕩器
- writetime(0X0B,0X06); //不開啟鬧鐘使能中斷,二進制數據,24小時格式
- writetime(0,7);
- writetime(1,0);
- writetime(2,54);
- writetime(3,0);
- writetime(4,10);
- writetime(5,0);
- writetime(6,3);
- writetime(7,16);
- writetime(8,7);
- writetime(9,19); //初始化芯片,僅須1次
- } */
- void timedisplay( ) //顯示時間
- {
- uchar shi,fen,mia;
- uchar a1,a2,a3,a4,a5,a6;
- shi=readtime(4);
- fen=readtime(2);
- mia=readtime(0); //讀時間
- if(smiao!=mia) //秒針有變化,沒有變化的時候就不用去刷新屏幕了
- {
- a1=shi/10;
- a2=shi%10;
- a3=fen/10;
- a4=fen%10;
- a5=mia/10;
- a6=mia%10;
- writezi(0,8,a1);
- writezi(0,24,a2); //時
- writezi(0,40,10); //10代表:冒號
- writezi(0,48,a3);
- writezi(0,64,a4); //分
- writezi(0,88,a5);
- writezi(0,104,a6); //秒
- writezi(0,80,10);
- smiao=mia; //備份秒數,以便下一秒比較
- SBUF=mia; //串口查看秒針更新
- TI=0;
- TH0=0X4C;
- TL0=0X00;
- TR0=1;
- }
- }
- void setup(uchar add,uchar num1,uchar num2,uchar num3)
- {
- uchar n1,n2,n3,n4,n5,n6;
- n1=num1/10;
- n2=num1%10;
- n3=num2/10;
- n4=num2%10;
- n5=num3/10;
- n6=num3%10;
- switch(add)
- {
- case 1:
- {
- writezi(1,8,n1);
- writezi(1,24,n2); //時
- writezi(0,40,10); //10代表:冒號
- writezi(0,48,n3);
- writezi(0,64,n4); //分
- writezi(0,80,10);
- writezi(0,88,n5);
- writezi(0,104,n6); //秒
- };break;
- case 2:
- {
- writezi(0,8,n1);
- writezi(0,24,n2); //時
- writezi(0,40,10); //10代表:冒號
- writezi(1,48,n3);
- writezi(1,64,n4); //分
- writezi(0,80,10);
- writezi(0,88,n5);
- writezi(0,104,n6); //秒
- };break;
- case 3:
- {
- writezi(0,8,n1);
- writezi(0,24,n2); //時
- writezi(0,40,10); //10代表:冒號
- writezi(0,48,n3);
- writezi(0,64,n4); //分
- writezi(0,80,10);
- writezi(1,88,n5);
- writezi(1,104,n6); //秒
- };break;
- default:break;
- }
- }
- void initdisplay( )
- {
- uchar h,v;
- for(h=0;h<2;h++)
- {
- writecomd(0xb1+h);
- writecomd(0x00); //起始地址低位 00H~0FH
- writecomd(0x13); //起始地址高位 10H~1FH
- for(v=0;v<32;v++)
- {
- writedat(zizuo[h][v]);
- }
- }
- for(h=0;h<3;h++)
- {
- writecomd(0xb3+h);
- writecomd(0x04); //起始地址低位 00H~0FH
- writecomd(0x11); //起始地址高位 10H~1FH
- for(v=0;v<88;v++)
- {
- writedat(zi[h][v]);
- }
- }
- }
- void timer ( )
- {
- TMOD = 0x21;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd; //設置波特率 9600
- TL1 = 0xFd;
- TR1 = 1; //啟動定時器1
- TH0=0X4C;
- TL0=0X00;
- EA=1;
- ET0=1;
- }
- void main( )
- {
- uchar sshi,sfen,smia,she;
- uchar as,ag;
- bit key,set;
- bit xz,lj;
- smiao=0x62;
- set=0;
- xz=0;
- lj=0;
- timer( );
- initoled( );
- initdisplay( );
- delay(4000);
- display( );
- //inittime( ); //DS12C887芯片初始化
- tuoji(lj);
- j1=j2=0;
- while(1)
- {
- if(set==0) //非設置狀態,正常顯示時間
- {
- timedisplay( );
- delay(50);
- }
- if(ts==1) //冒號閃爍,秒針更新后啟動定時器0.5S以后定時器把ts置1,在主程序里面擦除冒號
- {
- //writezi(0,40,11);
- writezi(0,80,11);
- ts=0;
- }
- if(km==0&&key==0) //設置鍵
- {
- delay(10);
- if(km==0)
- {
- key=1;
- if(set==0) //設置之前讀一次就可
- {
- sshi=readtime(4);
- sfen=readtime(2);
- smia=readtime(0);
- }
- set=1;
- she++;
- if(she>3)
- {
- she=0;
- set=0; //清除設置狀態
- writetime(4,sshi);
- writetime(2,sfen);
- writetime(0,smia); //把設置好的參數寫入時鐘
- }
- setup(she,sshi,sfen,smia);
- }
- }
- if(jia==0&&key==0&&set==1) //設置狀態加鍵允許操作
- {
- delay(10);
- if(jia==0)
- {
- key=1;
- t=100;
- while(jia==0)
- {
- while(jia==0&&t>0)
- {
- t--;
- delay(10); //10毫秒1次,100次即1秒后仍未松手判定為長按
- } //反之沒到1秒松手,只能運行一次加操作
- switch(she)
- {
- case 1:
- {
- sshi++;
- if(sshi==24)
- {
- sshi=0;
- }
- as=sshi/10;
- ag=sshi%10;
- writezi(1,8,as);
- writezi(1,24,ag); //時
- };break;
- case 2:
- {
- sfen++;
- if(sfen==60)
- {
- sfen=0;
- }
- as=sfen/10;
- ag=sfen%10;
- writezi(1,48,as);
- writezi(1,64,ag); //分
- };break;
- case 3:
- {
- smia++;
- if(smia==60)
- {
- smia=0;
- }
- as=smia/10;
- ag=smia%10;
- writezi(1,88,as);
- writezi(1,104,ag); //秒
- };break;
- default:break;
- }
- delay(60); //長按狀態60毫秒加一次,直到松手為止
- }
- }
- }
- if(qh==0&&key==0&&set==1) //取消鍵
- {
- delay(10);
- if(qh==0)
- {
- key=1;
- set=0;
- she=0;
- }
- }
- if(key==1) //按鍵松手檢測
- {
- if(km==1&&jia==1&&qh==1&&k==1)
- {
- delay(10);
- if(km==1&&jia==1&&qh==1&&k==1)
- {
- key=0;
- }
- }
- }
- if(RTS==0&&xz==0&&lj==0) //聯機狀態,下載允許狀態 lj=1脫機狀態不會觸發冷啟動
- {
- delay(5);
- if(RTS==0)
- {
- j1=j2=1;
- delay(1800);
- j1=j2=0; //斷電冷啟動
- xz=1; //下載標志位,聯機下載過程中RTS一直為0,避免下載完成之前再次觸發冷啟動
- }
- }
- if(xz==1) //檢測RTS恢復高電平后,解除下載標志
- {
- if(RTS==1)
- {
- delay(10);
- if(RTS==1)
- {
- xz=0;
- }
- }
- }
- if(k==0&&key==0) //面板按鍵 短按開關電源,長按脫機/聯機切換
- {
- delay(10);
- if(k==0)
- {
- t=100;
- while(k==0&&t>0)
- {
- delay(10);
- t--;
- if(t==0) //超過1秒長按識別
- {
- lj=~lj; //聯機/脫機狀態
- tuoji(lj); //屏幕顯示聯機/脫機圖標
- }
- }
- key=1;
- if(t>0) //小于1秒短按識別
- {
- j1=~j1;
- j2=~j2;
- }
- }
- }
- }
- }
- void aa( ) interrupt 1
- {
- TH0=0X4C;
- TL0=0X00;
- tt++;
- if(tt==10)
- {
- TR0=0;
- ts=1;
- tt=0;
- }
- }
復制代碼
51hei.png (11 KB, 下載次數: 74)
下載附件
2022-5-1 03:52 上傳
附件里面是Gerber文件下載:
Gerber文件與原理圖.7z
(285.41 KB, 下載次數: 16)
2022-5-1 03:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|