久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2977|回復: 1
打印 上一主題 下一主題
收起左側(cè)

STC15F204EA電子時鐘設定鬧鐘時間到了蜂鳴器不響求幫助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:221879 發(fā)表于 2020-2-22 22:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
本帖最后由 xbox007 于 2020-2-24 21:19 編輯

設定鬧鐘時間到了蜂鳴器不響      麻煩大家?guī)臀铱纯丛创a哪里出了問題,幫忙改正下謝謝!   蜂鳴器接的P1.7   PNP管

#include"reg52.h"
#include"ds1302.h"
#include"intrins.h"
//#include"EEP.h"
#define uchar unsigned char
#define uint unsigned int
#define on 1
#define off 0                        
#define NOP(N)  NOP##N()
sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器
sfr ADC_RES     =   0xBD;           //ADC高8位結(jié)果
sfr ADC_RESL    =   0xBE;           //ADC低2位結(jié)果
sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器
uint get_temperature(uint adc);
void Get_Temp(void);

//段碼位選
sbit G1= P3^4;
sbit G2= P3^5;
sbit G3= P3^6;
sbit G4= P3^7;
//按鍵定義
sbit set=P3^0;
sbit jia=P3^1;
sbit zh=P3^3;                                        // 顛倒開關(guān)
#define N 8                                                        //ADC采樣使用遞推平均濾波算法,采樣次數(shù)

unsigned int  Temp_Buf[N+1];                //采樣數(shù)組
unsigned char ADCcount;                                //數(shù)碼管顯示計數(shù)變量,ADC采樣次數(shù)變量
uchar tab[4]={0};                                        //顯示緩存
unsigned int temp[3];
#define FOSC 11059200L

#define T1MS (65536-FOSC/12/33)                        //12T模式           30MS


sfr AUXR = 0x8e;                                                //Auxiliary register
sbit P10 = P1^0;          //調(diào)用鬧鐘用
sfr P1M0        =   0x92;
sfr P1M1        =   0x91;

bit nf=0;                //鬧鐘開標志:受水銀影響
bit gk=0;                //光控開標志
bit nk=0;                //鬧鐘開標志:受設置影響
bit nx=1;                //鬧鐘響標志:受時間影響
bit ps=0;                //顛倒開關(guān)標志
bit flag1=1,
        wflag1=0;
int ld=1;
char menu=0;
char flag;


//沒有小數(shù)點                 共陽數(shù)碼管
uchar table1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                          0x80,0x90,0xff,0x88,0xc7};                          //c4
//顯示小數(shù)點                                                           a   l
uchar table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
                          0x00,0x10,0xff,};
//倒沒有小數(shù)點
uchar table3[]={0xC0,0xCF,0xA4,0x86,0x8B,0x92,0x90,0xC7,
                          0x80,0x82,0xff,};
//倒顯示小數(shù)點
uchar table4[]={0x40,0x4F,0x24,0x06,0x0B,0x12,0x10,0x47,
                                                  0x00,0x02,0xff,0x70,};

//延時ms
void delay_ms(uchar ms){
        uchar i;
        while(ms--){
                for(i=0;i<123;i++);        
        }
}
//溫度顯示
void display_temperatue(){

        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[0]];
        delay_ms(8);

        G1 = on;
        G2 = off;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[1]];
        delay_ms(8);
        
        G1 = on;
        G2 = on;
        G3 = off;
        G4 = on;
//        P2 =  table3[tab[2]];
        P2 =  table4[11];
        delay_ms(8);

        G1 = on;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table4[tab[3]];
//        P2 =  table1[tab[3]];
        delay_ms(5);
}
//時間顯示
void display_time(){

        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[0]];
        delay_ms(5);
        if(flag>0){
                G1 = on;
                G2 = off;
                G3 = on;
                G4 = on;
                P2 =  table1[tab[1]];
                delay_ms(5);
               
                G1 = on;
                G2 = on;
                G3 = off;
                G4 = on;
                P2 =  table3[tab[2]];
                delay_ms(5);        
        
        }else{
                G1 = on;
                G2 = off;
                G3 = on;
                G4 = on;
                P2 =  table2[tab[1]];
                delay_ms(5);        

                G1 = on;
                G2 = on;
                G3 = off;
                G4 = on;
                P2 =  table4[tab[2]];
                delay_ms(5);        
        }
        if(nx==0){
                if(flag>0){
                        G1 = on;
                        G2 = on;
                        G3 = on;
                        G4 = off;
                        P2 =  table1[tab[3]];
                        delay_ms(5);        
                }
                else{
                        G1 = on;
                        G2 = on;
                        G3 = on;
                        G4 = off;
                        P2 =  table2[tab[3]];
                        delay_ms(5);        
                }
        }else{
                        G1 = on;
                        G2 = on;
                        G3 = on;
                        G4 = off;
                        P2 =  table1[tab[3]];
                        delay_ms(5);        
        }


        G1 = on;
        G2 = on;
        G3 = on;
        G4 = on;         
}
//音頻調(diào)用
void display_Audio(){

        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        if(temp[1]>5){P2=0xcf;}else{P2=0xff;}
        delay_ms(10);
        if(temp[1]>30){P2=0xf9;}else{P2=0xff;}
        delay_ms(10);
        G1 = on;
        G2 = off;
        G3 = on;
        G4 = on;
        if(temp[1]>60){P2=0xcf;}else{P2=0xff;}
        delay_ms(10);
        if(temp[1]>90){P2=0xf9;}else{P2=0xff;}
        delay_ms(10);

        G1 = on;
        G2 = on;
        G3 = off;
        G4 = on;
        if(temp[1]>120){P2=0xf9;}else{P2=0xff;}
        delay_ms(10);
        if(temp[1]>150){P2=0xcf;}else{P2=0xff;}
        delay_ms(10);

        G1 = on;
        G2 = on;
        G3 = on;
        G4 = off;
        if(temp[1]>180){P2=0xcf;}else{P2=0xff;}
        delay_ms(10);
        if(temp[1]>210){P2=0xf9;}else{P2=0xff;}
        delay_ms(10);
}

//鬧鐘用 ,光控用
void display_alme(){
        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[0]];
        delay_ms(8);

        G1 = on;
        G2 = off;
        G3 = on;
        G4 = on;
        P2 =  table2[tab[1]];
        delay_ms(8);
        
        G1 = on;
        G2 = on;
        G3 = off;
        G4 = on;
        P2 =  table4[tab[2]];
        delay_ms(8);

        G1 = on;
        G2 = on;
        G3 = on;
        G4 = off;
        P2 =  table2[tab[3]];
        delay_ms(5);
        G1 = on;
        G2 = on;
        G3 = on;
        G4 = on;

}
/*
//設計調(diào)用
void display_set1(){

        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[0]];
        delay_ms(8);

        G1 = on;
        G2 = off;
        G3 = on;
        G4 = on;
        P2 =  table2[tab[1]];
        delay_ms(8);
        
        G1 = on;
        G2 = on;
        G3 = off;
        G4 = on;
        P2 =  table4[tab[2]];
        delay_ms(8);

        G1 = on;
        G2 = on;
        G3 = on;
        G4 = off;
        P2 =  table1[tab[3]];
        delay_ms(5);
        G1 = on;
        G2 = on;
        G3 = on;
        G4 = on;
} */
//設計調(diào)用
void display_set(){

        G1 = off;
        G2 = on;
        G3 = on;
        G4 = on;
        P2 =  table1[tab[0]];
        delay_ms(8);

        G1 = on;
        G2 = off;
        G3 = on;
        G4 = on;
        P2 =  table2[tab[1]];
        delay_ms(8);
        
        G1 = on;
        G2 = on;
        G3 = off;
        G4 = on;
        P2 =  table4[tab[2]];
        delay_ms(8);

        G1 = on;
        G2 = on;
        G3 = on;
        G4 = off;
        P2 =  table1[tab[3]];
        delay_ms(5);
        G1 = on;
        G2 = on;
        G3 = on;
        G4 = on;
}
//ADC初始化
void ic_adc_init(){
        ADC_CONTR = 0xE0;        //90T, ADC power on
        delay_ms(5);

}
//讀ADC值
uint get_adc_temp(uchar channel){

        ADC_RES = 0;
        ADC_RESL = 0;

        ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | channel;         //start the ADC

        delay_ms(1);
        while((ADC_CONTR & 0x10) == 0)        ;        //wait for ADC finish
        ADC_CONTR &= ~0x10;                //清除ADC結(jié)束標志
        return        (((uint)ADC_RES << 2) | (ADC_RESL & 3));
}
void key(){

        if(zh==1){ps=0;}else ps=1;
        if(ps==0){
                if(set==0){
                        delay_ms(10);
                        if(set==0){
                                menu+=1;
                                if(menu==1)//        read_time();
                                if(menu==3){ read_nao();}
                        //        if(menu==5)                        // IapProgramByte(IAP_ADDRESS+5,gk&0x01);           display_alme();//調(diào)顯示
                        //        if(menu==6)                          //        IapProgramByte(IAP_ADDRESS+6,nk&0x01);  display_alme();//調(diào)顯示
                                if(menu==7)menu=0;         write_time();
                                while(set==0);
                                display_set();//調(diào)顯示               
                        }
                }
                if(menu==1){ //調(diào)分鐘
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){        
                                fen=fen+1;
                                if(fen == 0x5a)
                                        fen = 0;
                                if((fen & 0x0f) >= 0x0a)
                                        fen = (fen & 0xf0) + 0x10;        
                                        while(jia==0);
                                }
                        }        display_set();//調(diào)顯示
                }
                if(menu==2){   //小時
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){
                                        shi=shi+1;
                                        if(shi == 0x24)
                                                shi = 0;
                                        if((shi & 0x0f) >= 0x0a)
                                                shi = (shi & 0xf0) + 0x10;        
                                                while(jia==0);                                
                                }
                        }display_set();//調(diào)顯示               
                }
                if(menu==3){        //分鐘
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){        
                                nfen=nfen+1;
                                if(nfen == 0x5a)
                                        nfen = 0;
                                if((nfen & 0x0f) >= 0x0a)
                                        nfen = (nfen & 0xf0) + 0x10;        
                                        while(jia==0);
                                }
                        }        display_alme();//調(diào)顯示
                }
                if(menu==4){        //小時
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){
                                        nshi=nshi+1;
                                        if(nshi == 0x24)
                                                nshi = 0;
                                        if((nshi & 0x0f) >= 0x0a)
                                                nshi = (nshi & 0xf0) + 0x10;        
                                                while(jia==0);                                
                                }
                        }display_alme();//調(diào)顯示               
                }
                if(menu==5){         //調(diào)光控
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){
                                       
                                        while(jia==0);
                                        gk=!gk;
                                       
                                //   IapProgramByte(0x03,gk);
                                }
                        } display_set();//調(diào)顯示
                }
                if(menu==6){         //調(diào)鬧鐘
                        if(jia==0){
                                delay_ms(10);
                                if(jia==0){
                                       
                                        while(jia==0);
                                        nk=!nk;
                                //        IapProgramByte(0x02,nk);
                        
                                }
                        }display_alme();//調(diào)顯示               
                }                                                                        
        }
}

void main(){

//        AUXR |= 0x80;                   //定時器0為1T模式
        AUXR &= 0x7f;                   //定時器0為12T模式
        TMOD = 0x00;                    //設置定時器為模式0(16位自動重裝載)
        TL0 = T1MS;                     //初始化計時值
        TH0 = T1MS >> 8;

    TR0 = 1;                        //定時器0開始計時
    ET0 = 1;                        //使能定時器0中斷
    EA = 1;

        ic_adc_init();
        init_ds1302_io();  
        init_ds1302();
        read_nao();

        P1M0=0X00;
        P1M1=0Xff;
        while(1){
        
                if(nk==1){if(shi==nshi && fen==nfen && nf==0){nx=0;}else{nx=1;}}  //開鬧鐘
                key();
                if(ps==0){
                        if(menu==0){//主菜單
                                if(flag1==1){         //顯示時間
                                        temp[2]=get_adc_temp(1);
                                        if(gk==1){
                                                                                       
                                                if(temp[2]<100) ld=5;
                                                if(temp[2]>100&&temp[2]<300)ld=10;
                                                if(temp[2]>300&&temp[2]<500)ld=50;
                                                if(temp[2]>500&&temp[2]<600)ld=80;
                                                if(temp[2]>600&&temp[2]<700)ld=100;
                                                if(temp[2]>700&&temp[2]<800)ld=120;
                                                if(temp[2]>900&&temp[2]<1000)ld=130;
                                                if(temp[2]>1000)ld=150;
                                        }else ld=5;
                                        read_time();
                                        tab[0]=shi/16;
                                        tab[1]=shi%16;
                                        tab[2]=fen/16;
                                        tab[3]=fen%16;
                                        display_time();
                                        delay_ms(ld);                                       
                                }
                                if(flag1==0)         //顯示溫度
                                {
                                        if(wflag1==0){wflag1=1;}
                                        Get_Temp();
                                        display_temperatue();
                                        delay_ms(ld);
                                }
                        }else{          //設置菜單
               
                                if(menu==1){ //調(diào)時間分
                                                tab[0]=shi/16;
                                                tab[1]=shi%16;
                                        if(flag>0){
                                                tab[2]=fen/16;                                       
                                                tab[3]=fen%16;
                                        }else{
                                                tab[2]=10;
                                                tab[3]=10;
                                        }                        
                                }
                                if(menu==2){ //調(diào)時間時
                                                tab[2]=fen/16;
                                                tab[3]=fen%16;               
                                        if(flag>0){
                                                tab[0]=shi/16;
                                                tab[1]=shi%16;

                                        }else{
                                                tab[0]=10;
                                                tab[1]=10;
                                        }        
                                }
                                if(menu==3){ //調(diào)鬧鐘分
        
                                                tab[0]=nshi/16;
                                                tab[1]=nshi%16;
                                        if(flag>0){
                                                tab[2]=nfen/16;                                       
                                                tab[3]=nfen%16;
                                        }else{
                                                tab[2]=10;
                                                tab[3]=10;
                                        }                        
                                }
                                if(menu==4){ //調(diào)鬧鐘時
        
                                        if(flag>0){
                                                tab[0]=nshi/16;
                                                tab[1]=nshi%16;
                                        }else{
                                                tab[0]=10;
                                                tab[1]=10;
                                        }        
                                                tab[2]=nfen/16;
                                                tab[3]=nfen%16;                        
                                }
                                if(menu==5){ //調(diào)光控
                                                tab[0]=11;
                                                tab[1]=gk;
                                                tab[2]=gk;
                                                tab[3]=gk;
        
                                }
                                if(menu==6){ //調(diào)鬧鐘
                                                tab[0]=12;
                                                tab[1]=nk;
                                                tab[2]=nk;
                                                tab[3]=nk;                        
                                }
                        }
                }
                if(ps==1){         //端口一定要設計置高阻輸入
                        temp[1]=get_adc_temp(0);
                        display_Audio();//
                }
         }
}
char t;
int t1;
// Timer0 interrupt routine  定時0中斷
void tm0_isr() interrupt 1 using 1
{

    P10 = ! P10;                    //將測試口取反
        t++;
        t1++;
        if(t==20)
        {
                t=0;
                wflag1=0;
                flag=!flag;
       if(nx==0)bell=!bell;
        }
        if(t1>0 && t1<350)flag1=1;
        if(t1>350 && t1<430)flag1=0;
        if(t1>430)t1=0;        
}
//NTC溫度
void Get_Temp(void)
{
        unsigned char xx;
        unsigned int sum,tempvalue;
        sum = tempvalue =0;
        Temp_Buf[N]=get_adc_temp(2);        //將ADC轉(zhuǎn)換結(jié)果放數(shù)組最高位
        if( ++ADCcount < 8)                //采樣初期不使用濾波算法
        {        
                for(xx=0;xx<N;xx++)        //準備濾波算法的數(shù)據(jù)
                {
                        Temp_Buf[xx]=Temp_Buf[xx+1];//所有數(shù)據(jù)循環(huán)左移
                }
                tempvalue=Temp_Buf[N];//采樣初期使用當前采樣值
        }
        else         //只有采樣次數(shù)大于8次以后才使用濾波算法        
        {
                ADCcount=8;        //采樣次數(shù)超過8次后,固定設置為8
                for(xx=0;xx<N;xx++)        //濾波算法
                {
                        Temp_Buf[xx]=Temp_Buf[xx+1];//所有數(shù)據(jù)循環(huán)左移
                        sum+=Temp_Buf[xx];        //求和
                }
                tempvalue=sum/N;                //求平均值               
        }        //        
        tempvalue=get_temperature(tempvalue);
//        tab[0]=tempvalue/1000;               
        tab[0]=tempvalue%1000/100;        //十位
        tab[1]=tempvalue%100/10;//個位加小數(shù)點
//        tab[3]=tempvalue%10;        //小數(shù)位
}

//        MF52E 10K at 25, B = 3534, ADC = 12 bits
uint code temp_table[]={
                140,        //;-40        0
                149,        //;-39        1
                159,        //;-38        2
                168,        //;-37        3
                178,        //;-36        4
                188,        //;-35        5
                199,        //;-34        6
                210,        //;-33        7
                222,        //;-32        8
                233,        //;-31        9
                246,        //;-30        10
                259,        //;-29        11
                272,        //;-28        12
                286,        //;-27        13                        14
                301,        //;-26        14                        15
                317,        //;-25        15                        16
                334,
                351,
                369,
                387,
                406,
                425,
                445,
                466,
                487,
                509,
                528,   //
                555,
                579,
                603,
                628,
                654,
                681,
                709,
                738,
                768,
                799,
                824,        //;-4        36
                858,        //;-3        37                9
                893,        //;-2        38
                929,        //;-1        39
                965,        //;0        40
                1003,        //;1        41
                1041,        //;2        42
                1080,        //;3        43
                1119,        //;4        44
                1139,
                1160,        //;5        45
                1180,
                1201,        //;6        46
        
                1243,        //;7        47
                1285,        //;8        48
                1328,        //;9        49
                1371,        //;10        50
                1414,        //;11        51
                1459,        //;12        52
                1503,        //;13        53
                1548,        //;14        54
                1593,        //;15        55
                1638,        //;16        56
                1684,        //;17        57
                1730,        //;18        58
                1775,        //;19        59
                1821,        //;20        60
                1867,        //;21        61
                1912,        //;22        62
                1958,        //;23        63
                2003,        //;24        64
                2048,        //;25        65
                2093,        //;26        66
                2137,        //;27        67
                2182,        //;28        68
                2225,        //;29        69
                2269,        //;30        70
                2312,        //;31        71
                2354,        //;32        72
                2397,        //;33        73
                2438,        //;34        74
                2479,        //;35        75
                2519,        //;36        76
                2559,        //;37        77
                2598,        //;38        78
                2637,        //;39        79
                2675,        //;40        80
                2712,        //;41        81
                2748,        //;42        82
                2784,        //;43        83
                2819,        //;44        84
                2853,        //;45        85
                2887,        //;46        86
                2920,        //;47        87
                2952,        //;48        88
                2984,        //;49        89
                3014,        //;50        90
                3044,        //;51        91
                3073,        //;52        92
                3102,        //;53        93
                3130,        //;54        94
                3157,        //;55        95
                3183,        //;56        96
                3209,        //;57        97
                3234,        //;58        98
                3259,        //;59        99
                3283,        //;60        100
                3306,        //;61        101
                3328,        //;62        102
                3351,        //;63        103
                3372,        //;64        104
                3393,        //;65        105
                3413,        //;66        106
                3432,        //;67        107
         
};
/********************  計算溫度 ***********************************************/
// 計算結(jié)果: 0對應-40.0度, 400對應0度, 625對應25.0度, 最大1600對應120.0度.
// 為了通用, ADC輸入為12bit的ADC值.
// 電路和軟件算法設計: Coody
/**********************************************/

#define                D_SCALE                10                //結(jié)果放大倍數(shù), 放大10倍就是保留一位小數(shù)
uint        get_temperature(uint adc)
{
        uint        code *p;
        uint        i;
        uchar        j,k,min,max;
        
//        adc = 1024 - adc;        //Rt接地
        p = temp_table;
        if(adc < p[0])                return (0xfffe);
        if(adc > p[160])        return (0xffff);
        
        min = 0;                //-40度
        max = 160;                //120度

        for(j=0; j<5; j++)        //對分查表
        {
                k = min / 2 + max / 2;
                if(adc <= p[k])        max = k;
                else                        min = k;
        }
                 if(adc == p[min])        i = min * D_SCALE;
        else if(adc == p[max])        i = max * D_SCALE;
        else        // min < temp < max
        {
                while(min <= max)
                {
                        min++;
                        if(adc == p[min])        {i = min * D_SCALE;        break;}
                        else if(adc < p[min])
                        {
                                min--;
                                i = p[min];        //min
                                j = (adc - i) * D_SCALE / (p[min+1] - i);
                                i = min;
                                i *= D_SCALE;
                                i += j;
                                break;
                        }
                }
        }
        return i;
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2020-2-23 10:26 | 只看該作者
這個程序是拼湊而來,沒有按模塊化編程規(guī)范組合。T1被串口和50ms中斷重復設置,ADC結(jié)果也沒有通過計算,直接送顯示,不可能得到溫度值。延時函數(shù)沒有按1T芯片修改參數(shù)等等,總之問題一大堆。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 草久久 | 日本黄色激情视频 | 成人免费观看男女羞羞视频 | 国产黄色网 | 欧美日韩在线免费 | 日韩欧美在线视频 | 色在线免费 | 一级片免费视频 | 国产精品69毛片高清亚洲 | 国产91视频一区二区 | 91原创视频在线观看 | 国产高清视频在线观看 | 久久久精品视 | 一区二区三区免费 | 99精品一区二区三区 | 先锋资源吧 | 中文字幕99| 国产成人精品区一区二区不卡 | 国产视频精品在线 | 久久久久久电影 | www国产精品| 日韩精品在线看 | 国产精品毛片久久久久久 | av在线成人 | 国产精品久久久久久久久动漫 | 精品一区二区电影 | 欧美v在线 | 亚洲精品一区二区三区在线 | 91精品国产色综合久久不卡98口 | 精品区一区二区 | 国产成人精品一区 | 成人av一区 | 97在线播放 | 久久久久久久成人 | 久久久999精品| 自拍偷拍中文字幕 | 色噜噜色综合 | 五月天天丁香婷婷在线中 | 亚洲最大的黄色网址 | 欧美精品一区三区 | 91国产在线视频在线 |