參考了在51黑電子論壇里查到了好幾位壇友發(fā)表的P10LED屏,用STC來驅(qū)動的帖子,其主要參考了未署名的一位網(wǎng)友的程序,在此表示感謝!
本帖子中采用了STC89C52作為MCU,DS3231作為時鐘源,P10LED屏作為顯示屏,顯示效果如下幾圖和一個短視頻。在這里值得一提的是P10供電電源問題,標準供電電壓為5V,由于是遠距離觀看屏顯示,在室內(nèi)觀看時亮度太高,非常刺眼,最關鍵是非常耗電,經(jīng)過試驗,把供電電壓高低到2.3V左右就可以了,且電流只100MA左右,用普通的手機充電器供電都完全可以了。我再蒙上一層半透光的膜片效果更好了。
制作出來的實物圖如下:
IMG_20210617_183634.jpg (3 MB, 下載次數(shù): 89)
下載附件
2021-7-1 17:50 上傳
IMG_20210617_183638.jpg (3.53 MB, 下載次數(shù): 96)
下載附件
2021-7-1 17:50 上傳
IMG_20210617_183642.jpg (3.55 MB, 下載次數(shù): 97)
下載附件
2021-7-1 17:50 上傳
IMG_20210617_183753.jpg (4.56 MB, 下載次數(shù): 109)
下載附件
2021-7-1 17:50 上傳
IMG_20210617_183842.jpg (4.28 MB, 下載次數(shù): 99)
下載附件
2021-7-1 17:50 上傳
IMG_20210617_183906.jpg (4.24 MB, 下載次數(shù): 96)
下載附件
2021-7-1 17:51 上傳
程序文件:
- #include <reg52.h>
- #include <intrins.h>
- //#define uchar unsigned char
- //#define uint unsigned int
- #define NOP _nop_()
- #define u8 unsigned char
- #define u16 unsigned int
- sbit OE = P2^0; //P10
- sbit A1 = P2^1; //P10
- sbit B1 = P2^2; //P10
- sbit SHCP=P2^4; //P10 11腳SHCP 移位時鐘
- sbit STCP=P2^3; //P10 12腳STCP 鎖存時鐘
- sbit DATA=P2^5; //P10 數(shù)據(jù)輸入
- //時鐘DS3231接口
- sbit DSSDA =P2^7;//接時鐘DS3231的SDA腳于P2.7
- sbit DSSCL=P2^6; //接時鐘DS3231的SCL腳于P2.6
- sbit LED=P1^2; //定義LED端口
- //sbit LED1=P1^3;
- sbit SHEZ=P3^7; //設置鍵,從年、月、日、周、時、分、秒順序移動;鍵值1-7
- sbit JIA=P3^6; //設置鍵值為1-7時,對應值加1;
- sbit JIAN=P3^5; //設置鍵值為1-7時,對應值減1;
- sbit QUED=P3^4; //完成設置后,使設置鍵的鍵值為0,保存到DS3231,完成時間的修改
- u8 code shisu[28][8]= //時鐘數(shù)字
- {
- {0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38},//0
- {0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x3c},//1
- {0x00,0x38,0x44,0x44,0x08,0x10,0x20,0x7c},//2
- {0x00,0x38,0x44,0x04,0x18,0x04,0x44,0x38},//3
- {0x00,0x08,0x18,0x28,0x48,0x7c,0x08,0x08},//4
- {0x00,0x7c,0x40,0x78,0x04,0x04,0x44,0x38},//5
- {0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x38},//6
- {0x00,0x7c,0x44,0x08,0x10,0x10,0x10,0x10},//7
- {0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38},//8
- {0x00,0x38,0x44,0x44,0x3c,0x04,0x44,0x38},//9
- {0x20,0x3c,0x48,0x3c,0x28,0x7e,0x08,0x08},//10年
- {0x00,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x46},//11月
- {0x00,0xfe,0x92,0xba,0xfe,0xba,0xaa,0xba},//12周
- {0x00,0x02,0xe2,0xaf,0xe2,0xaa,0xe2,0x06},//13時
- {0x00,0x28,0x24,0x42,0xbc,0x14,0x24,0x4c},//14分
- {0x00,0x74,0x2e,0xf5,0x26,0x74,0xa8,0x30},//15秒
- {0x00,0x00,0x00,0x02,0x7f,0x00,0x00,0x00},//16一
- {0x00,0x00,0x3c,0x00,0x00,0x00,0x7e,0x00},//17二
- {0x00,0x00,0x3c,0x00,0x3c,0x00,0x7e,0x00},//18三
- {0x00,0xfe,0xaa,0xaa,0xaa,0xce,0x82,0xfe},//19四
- {0x00,0x3c,0x10,0x10,0x3c,0x14,0x24,0x7e},//20五
- {0x00,0x20,0x10,0x7c,0x00,0x28,0x44,0x00},//21 六
- {0x00,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e},//22日
- {0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00},//23 :
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //24 無顯示
- {0x00,0x60,0x6c,0x12,0x10,0x10,0x12,0x0c}, //25℃
- {0x00,0x00,0xf8,0x20,0x22,0x20,0x22,0x20}, //26 T:
- {0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00} //27 -
- };
- u8 code shisuz[4][8]= //十位數(shù)
- {
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //0
- {0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20}, //1
- {0x00,0xc0,0x20,0x20,0x60,0x80,0x80,0x60}, //2
- {0x00,0xc0,0x20,0x20,0xc0,0x20,0x20,0xc0} //3
- };
- u8 code shisuy[10][8]= //個位數(shù)
- {
- {0x00,0x06,0x09,0x09,0x09,0x09,0x09,0x06},//0
- {0x00,0x02,0x06,0x02,0x02,0x02,0x02,0x07},//1
- {0x00,0x06,0x09,0x09,0x01,0x02,0x04,0x0f},//2
- {0x00,0x06,0x09,0x01,0x06,0x01,0x09,0x06},//3
- {0x00,0x02,0x06,0x0a,0x0a,0x0f,0x02,0x02},//4
- {0x00,0x0f,0x08,0x0e,0x01,0x01,0x09,0x06},//5
- {0x00,0x06,0x09,0x08,0x0e,0x09,0x09,0x06},//6
- {0x00,0x0f,0x09,0x02,0x02,0x02,0x02,0x02},//7
- {0x00,0x06,0x09,0x09,0x06,0x09,0x09,0x06},//8
- {0x00,0x06,0x09,0x09,0x07,0x01,0x09,0x06},//9
- };
- u8 table1[2][32];//P10寫屏變量
- u8 T[7]=0,hp=0,js=0,sz,tt; //定義時間變量:秒、分、時、周、日、月、年;換屏變量,溫度
- bit f; //定義溫度符號
- void DS3231_IIC_delay(void); //延時函數(shù)
- void DS3231_IIC_start(void) ; //起始信號
- void DS3231_IIC_stop(void); //停止信號
- void DS3231_IIC_Tack(void); //接收應答
- void DS3231_IIC_write_byte(u8 Data); //寫入一個字節(jié)的數(shù)據(jù)函數(shù)
- u8 DS3231_IIC_read_byte(void); //讀取1個字節(jié)數(shù)據(jù)函數(shù)
- void DS3231_IIC_single_byte_write(u8 Waddr,u8 Data); //寫入數(shù)據(jù)函數(shù)
- u8 DS3231_IIC_single_byte_read(u8 Waddr); //讀取數(shù)據(jù)函數(shù)
- void DS3231_IIC_lianxu_read(void); //連續(xù)讀取0H-06H中的數(shù)據(jù)
- void DS3231_IIC_Init(void); //初始化
- void Init_Timer0(void); //定時零提供秒閃
- void dushu(u8 n); //寫數(shù)據(jù)
- void KEY(void); //按鍵函數(shù)
- void get_T(void); //溫度獲取
- /*******************************************************************************************/
- /*******************************************************************************************/
- void Delay1ms(u16 mm) //11.0592MHz
- {
- u8 i, j,k;
- _nop_();
- for(k=0;k<mm;k++)
- { i = 2;
- j = 199;
- do { while (--j); } while (--i);
- }
- }
- //P10數(shù)據(jù)串行輸入
- void serial_input(u8 dat)
- {
- u16 m;
- for(m=0;m<8;m++)
- {
- if(dat & 0x80)
- DATA=0; //
- else
- DATA=1; //修改取反
- SHCP=0;
- SHCP=1;
- NOP;
- NOP;
- SHCP=0;
- NOP;
- NOP;
- dat=dat<<1;
- }
- }
- /*******************************************************************************************/
- //P10并出
- void serial_output()
- {
- STCP=1;
- NOP;
- NOP;
- STCP=0;
- }
- /*******************************************************************************************/
- /*******************************************************************************************/
- //P10行顯控制
- void HC138_scan(u8 temp)
- {
- OE=1;
- A1=0x01 & temp;
- B1=0x01 &(temp>>1);
- }
- /*******************************************************************************************/
- //讀取數(shù)字函數(shù)
- void dushu(u8 n) //參數(shù)0正常顯示,參數(shù)1為設置
- {
- u8 i;
- if(n==0)
- {
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[2]>>4][i];//上部 0
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[2]&0x0f][i]|shisu[23][i];
- else table1[0][2*i+1]=shisu[T[2]&0x0f][i];//上部 1|shisuz[2][i]
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[T[1]>>4][i];//上部 2
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[T[1]&0x0f][i];//上部 3
- switch(hp)
- {
- case 0:{
- for(i=8;i<16;i++)
- table1[0][2*i]=shisuz[T[6]>>4][i-8]|shisuy[T[6]&0x0f][i-8]; //下部 0
- for(i=8;i<16;i++)
- table1[0][2*i+1]=shisu[10][i-8]; //下部 1 年字
- for(i=8;i<16;i++)
- table1[1][2*i]=shisuz[T[5]>>4][i-8]|shisuy[T[5]&0x0f][i-8]; //下部 2 周字
- for(i=8;i<16;i++)
- table1[1][2*i+1]=shisu[11][i-8]; //下部 3 月
- }
- break; //顯示年月
- case 1:{
- for(i=8;i<16;i++)
- table1[0][2*i]=shisuz[T[4]>>4][i-8]|shisuy[T[4]&0x0f][i-8]; //下部 0
- for(i=8;i<16;i++)
- table1[0][2*i+1]=shisu[22][i-8]; //下部 1 日字
- for(i=8;i<16;i++)
- table1[1][2*i]=shisu[12][i-8]; //下部 2 周字
- for(i=8;i<16;i++)
- table1[1][2*i+1]=shisu[T[3]+15][i-8]; //下部 3
- }
- break; //顯示日和星期
- case 2:{
- get_T(); //首先獲取溫度
- if(f==0)
- for(i=8;i<16;i++)
- table1[0][2*i]=shisu[26][i-8]; //下部 首位顯示T:
- else
- for(i=8;i<16;i++)
- table1[0][2*i]=shisu[27][i-8]; //下部首位顯示-
- for(i=8;i<16;i++)
- table1[0][2*i+1]=shisu[tt/10][i-8]; //下部 1
- for(i=8;i<16;i++)
- table1[1][2*i]=shisu[tt%10][i-8]; //下部 2
- for(i=8;i<16;i++)
- table1[1][2*i+1]=shisu[25][i-8]; //下部 3
- }
- break; //顯示溫度
- }
- }
- else
- {
- /********************設置日期時上半部分顯示內(nèi)容*************************************/
- switch(sz)
- {
- case 1:{ //修改年份
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[6]/10][i];//上部 0 年的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[6]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[10][i];//上部 2 顯示年
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 2:{ //修改月份
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[5]/10][i];//上部 0 月的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[5]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[11][i];//上部 2 顯示月
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 3:{ //修改日期
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[4]/10][i];//上部 0 日的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[4]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[22][i];//上部 2 顯示日
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 4:{ //修改星期
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[24][i];//上部 0 星期的十位,不顯示
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[3]][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1|shisuz[2][i]
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[12][i];//上部 2 顯示周
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 5:{ //修改小時
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[2]/10][i];//上部 0 小時的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[2]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1|shisuz[2][i]
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[13][i];//上部 2 顯示時
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 6:{ //修改分鐘
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[1]/10][i];//上部 0 分鐘的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[1]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1|shisuz[2][i]
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[14][i];//上部 2 顯示分
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- case 7:{ //修改秒鐘
- for(i=0;i<8;i++)
- table1[0][2*i]=shisu[T[0]/10][i];//上部 0 秒的十位,不閃爍
- for(i=0;i<8;i++)
- if(LED==1) table1[0][2*i+1]=shisu[T[0]%10][i];
- else table1[0][2*i+1]=shisu[24][i];//上部 1|shisuz[2][i]
- for(i=0;i<8;i++)
- table1[1][2*i]=shisu[15][i];//上部 2 顯示秒
- for(i=0;i<8;i++)
- table1[1][2*i+1]=shisu[24][i];//上部 3 不顯示
- }
- break;
- }
-
- /*************設置日期時下部均不顯示************************/
- for(i=8;i<16;i++)
- table1[0][2*i]=shisu[24][i-8]; //下部 0
- for(i=8;i<16;i++)
- table1[0][2*i+1]=shisu[24][i-8]; //下部 1
- for(i=8;i<16;i++)
- table1[1][2*i]=shisu[24][i-8]; //下部 2
- for(i=8;i<16;i++)
- table1[1][2*i+1]=shisu[24][i-8]; //下部 3
- }
- }
- /*******************************************************************************************/
- //P10整屏顯示
- void display(void)
- {
- u8 i,j,k;
- for(k=0;k<4;k++) //顯示的四行
- {
- for(j=0;j<2;j++) //顯示3、4列
- {
- for(i=0;i<2;i++) // 顯示1、2列
- {
-
- serial_input(table1[j][3*8+2*k+i]);
- serial_input(table1[j][2*8+2*k+i]);
- serial_input(table1[j][1*8+2*k+i]);
- serial_input(table1[j][0*8+2*k+i]);
- }
- }
- serial_output();
- HC138_scan(k);
- }
- }
- /*******************************************************************************************/
- /*******************************************************************************************/
- /*******************************************************************************************/
- /*******************************************************************************************/
- void main()
- {
- // u8 i, Waddr=0;
- Init_Timer0();
- Delay1ms(1);
- DS3231_IIC_Init();
- /* T[0]=0x00; //0秒
- T[1]=0x01; //50分
- T[2]=0x22; //23點
- T[3]=0x05; //星期日
- T[4]=0x07; //7日
- T[5]=0x05; //5月
- T[6]=0x21; //21年
- for(i=0;i<7;i++) //寫入日期和時間
- {
- DS3231_IIC_single_byte_write(Waddr,T[i]);
- Waddr++;
- } */
- Delay1ms(2);
- //display();
- DS3231_IIC_lianxu_read(); //連續(xù)讀取0H-06H中的數(shù)據(jù)
- Delay1ms(2);
- dushu(0);
- while(1)
- {
- /* if(LED==1)
- {
- DS3231_IIC_lianxu_read(); //連續(xù)讀取0H-06H中的數(shù)據(jù)
- dushu();
- }*/
- display(); //顯示
- KEY(); //鍵盤掃描
- if(sz!=0) dushu(1);
- /*Delay1ms();
- Delay1ms();
- Delay1ms();
- Delay1ms(); */
- }
- }
- void DS3231_IIC_delay(void) //延時函數(shù)
- {
- u8 i;
- for(i=0;i<1;i++);
- }
- void DS3231_IIC_start(void) //起始信號
- {
- DSSDA=1;
- DSSCL=1;
- DS3231_IIC_delay();
- DSSDA=0;
- DS3231_IIC_delay();
- DSSCL=0;
- }
- void DS3231_IIC_stop(void) //停止信號
- {
- DSSDA=0;
- DS3231_IIC_delay();
- DSSCL=1;
- DS3231_IIC_delay();
- DSSDA=1;
- DS3231_IIC_delay();
- }
- void DS3231_IIC_Tack(void) //接收應答
- {
- DSSCL=1; //拉高SCL
- DS3231_IIC_delay();
- while(DSSDA==1); //由P2.7讀入1,表示3231無應答,需要等待
- DS3231_IIC_delay();
- DSSCL=0; //拉低SCL
- DS3231_IIC_delay();
- }
- void DS3231_IIC_write_byte(u8 Data) //寫入一個字節(jié)的數(shù)據(jù)函數(shù)
- {
- u8 i;
- for (i=0;i<8;i++)
- {
- if(Data&0x80)
- DSSDA=1;
- else
- DSSDA=0;
- DS3231_IIC_delay();
- DSSCL=1;
- DS3231_IIC_delay();
- DSSCL=0;
- DS3231_IIC_delay();
- Data=Data<<1;
- }
- }
- u8 DS3231_IIC_read_byte(void) //讀取1個字節(jié)數(shù)據(jù)函數(shù)
- {
- u8 i,Data;
- for(i=0;i<8;i++)
- {
- DSSCL=1;
- DS3231_IIC_delay();
- Data=Data<<1;
- DS3231_IIC_delay();
- if(DSSDA)
- Data=Data|0x01;
- DSSCL=0;
- DS3231_IIC_delay();
- }
- return Data;
- }
- void DS3231_IIC_single_byte_write(u8 Waddr,u8 Data) //寫入數(shù)據(jù)函數(shù)
- {
- DS3231_IIC_start();
- DS3231_IIC_write_byte(0xd0);//DS3231的地址
- DS3231_IIC_Tack();
- DS3231_IIC_write_byte(Waddr);//欲寫入的地址
- DS3231_IIC_Tack();
- DS3231_IIC_write_byte(Data);//欲寫入的地址數(shù)據(jù)
- DS3231_IIC_Tack();
- DS3231_IIC_stop();
- }
- u8 DS3231_IIC_single_byte_read(u8 Waddr) //讀取數(shù)據(jù)函數(shù)
- {
- u8 Data;
- DS3231_IIC_start();
- DS3231_IIC_write_byte(0xd0);//DS3231的地址
- DS3231_IIC_Tack();
- DS3231_IIC_write_byte(Waddr);//欲讀取的地址,本質(zhì)上是移動指針
- DS3231_IIC_Tack();
- DS3231_IIC_stop();
- DS3231_IIC_start();
- DS3231_IIC_write_byte(0xd1);//告訴3231欲讀取指針所指寄存器內(nèi)容
- DS3231_IIC_Tack();
- Data=DS3231_IIC_read_byte();
- DS3231_IIC_delay();
- DS3231_IIC_stop();
- return Data;
- }
- void DS3231_IIC_lianxu_read(void) //連續(xù)讀取0H-06H中的數(shù)據(jù)
- {
- u8 i,Waddr;
- Waddr=0x00;
- for(i=0;i<7;i++)
- {
- T[i]=DS3231_IIC_single_byte_read(Waddr);
- Waddr=Waddr+1;
- }
- }
- void DS3231_IIC_Init(void) //初始化
- {
- DSSDA=1;
- DSSCL=1;
- DS3231_IIC_single_byte_write(0x0e,0x00);
- }
- /*********溫度獲取***************/
- void get_T(void)
- {
- u8 Tem_L,Tem_H;
- Tem_H=DS3231_IIC_single_byte_read(0x11); //溫度 高字節(jié) 整數(shù)部分
- Tem_L=DS3231_IIC_single_byte_read(0x12); //溫度 低字節(jié) 小數(shù)部分
-
- Tem_L = (Tem_L>>6)*0.25+0.5; //小數(shù)部分四舍五入
- tt=Tem_H+Tem_L;
- f=Tem_H>>7 ; //是1的話表示負溫度,0為正溫度
- }
- /*------------------------------------------------
- 定時器初始化子程序
- ------------------------------------------------*/
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
- //TMOD |= 0x11;
- TH0=(65536-2000)/256; //給定初值 2毫秒
- TL0=(65536-2000)%256;
- EA=1; //總中斷打開
- ET0=1; //定時器中斷打開
- TR0=1; //定時器開關打開
- /*TMOD |= 0x10; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
- TH1=0x00; //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出
- TL1=0x00;
- //EA=1; //總中斷打開
- ET1=1; //定時器中斷打開
- TR1=1; //定時器開關打開
- IT1=1;*/
- }
- /*------------------------------------------------
- 定時器中斷子程序
- ------------------------------------------------*/
- void Timer0_isr(void) interrupt 1 //using 1
- {
- static unsigned char num;
- TH0=(65536-2000)/256; //重新賦值 2毫秒
- TL0=(65536-2000)%256;
- num++;
- if(num==250)
- {
- num=0;
- js++;
- LED=~LED; //指示燈反相,可以看到閃爍
- if(sz==0)
- {
- dushu(0);
- if(js==10)
- {
- js=0;
- hp++;
- if(hp==3) hp=0;
- DS3231_IIC_lianxu_read(); //連續(xù)讀取0H-06H中的數(shù)據(jù)
-
- }
- }
- /*display();
- */
-
- }
- }
- /*
- //外部中斷解碼程序
- void intersvr1(void) interrupt 2 using 1
- {
- LED1=~LED1; //LED1閃爍
-
- }
- */
- /*------------------------------------------------
- 定時器中斷子程序
- ------------------------------------------------
- void Timer1_isr(void) interrupt 3 using 1
- {
- TH1=(65536-2000)/256; //重新賦值
- TL1=(65536-2000)%256;
- ss++;
- if(ss==250)
- {
- ss=0;
- LED=~LED; //LED閃爍
- }
- }*/
- void KEY(void) //按鍵函數(shù)
- {
- u8 i,ss,Waddr=0;
- if(SHEZ==0)
- {
- Delay1ms(15);
- if(SHEZ==0) //如果沒有按下就跳出
- {
- while(!SHEZ); //等待按鍵松開
- sz++;
- if(sz==1)
- for(i=0;i<7;i++)
- T[i]=(T[i]>>4)*10+(T[i]&0x0f) ; //將BCD十六進制數(shù)轉(zhuǎn)化為十進制數(shù)
- if(sz==8) sz=1;
- }
- }
- if(JIA==0) //加1鍵
- {
- Delay1ms(15);
- if(JIA==0) //如果沒有按下就跳出
- {
- while(!JIA); //等待按鍵松開
- switch(sz)
- {
- case 1:{
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (2.83 KB, 下載次數(shù): 106)
下載附件
2021-7-1 20:00 上傳
完整程序請下載附件:
P10_DS3231.rar
(8.7 KB, 下載次數(shù): 118)
2021-7-1 18:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|