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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4835|回復: 1
打印 上一主題 下一主題
收起左側

avr 12864 矩陣鍵盤

[復制鏈接]
跳轉到指定樓層
樓主
ID:57823 發表于 2013-12-12 15:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//要做成定時器中斷法,節省時間開支
/**************************************
** 說明:線翻轉法進行鍵盤掃描
** 輸出:獲得高低位的掃描值
** 有鍵時需要耗時 14ms
**************************************/
unsigned char key_scan(void)
{
unsigned char temp=0,key=0;
        KEY_DDR  = 0xF0;  //高四位輸出0,鍵按下,則對應的值為0
        KEY_PORT = 0x0F;   //低四位輸入,內部電阻上拉,沒有鍵按下時為高
        temp = KEY_PIN&0x0F;//與掉高四位
        if(temp==0x0F)
        {
                return 0; // 無按鍵返回
        }
        else
        {
                Delay_ms(10);
                temp = KEY_PIN&0x0F;   //延時去抖后再檢測
                if(temp==0x0F)
                return 0;
                else
                key=temp;
        }
        //翻轉
        KEY_DDR  = 0x0F; //低四位輸出0,鍵按下,則對應的值為0
        KEY_PORT = 0xF0;  //高四位輸入,內部電阻上拉,沒有鍵按下時為高
        Delay_ms(3);     
        //延時等待穩定

        temp = KEY_PIN&0xF0;//與掉低四位
        if(temp==0xF0)
        {
                return 0; // 無按鍵返回
        }
        else          
                //這里不再延時再掃描,因為已經確定了不是抖動才會進入本步操作。
        {
                key |= temp;        //高低位的鍵值進入KEY
        }
        KEY_DDR = 0x00;/*輸出復位*/
        KEY_PORT = 0xFF;


        return key;
}
/**************************************
** 說明:獲得鍵盤的值  
** 內部調用函數key_scan
** 輸出:實際鍵值
**************************************/
unsigned char get_key(unsigned char key_get)
{
        switch (key_get)
        {/*將按鍵碼轉換成鍵值*/
                case  Key_0_zero: LCD_WRITE_DAT_CMD(WRDAT,'0');
                        return 0;
                case  Key_1_BLACK: LCD_WRITE_DAT_CMD(WRDAT,'1');
                        return 1;
                case  Key_2_PRINT: LCD_WRITE_DAT_CMD(WRDAT,'2');
                        return 2;
                case  Key_3_REPORT: LCD_WRITE_DAT_CMD(WRDAT,'3');
                        return 3;
                case  Key_4_START: LCD_WRITE_DAT_CMD(WRDAT,'4');
                        return 4;
                case  Key_5_CURVE: LCD_WRITE_DAT_CMD(WRDAT,'5');
                        return 5;
                case  Key_6_TIME: LCD_WRITE_DAT_CMD(WRDAT,'6');
                        return 6;
                case  Key_7_CHECK: LCD_WRITE_DAT_CMD(WRDAT,'7');
                        return 7;
                case  Key_8_SAVE: LCD_WRITE_DAT_CMD(WRDAT,'8');
                        return 8;
                case  Key_9_CORRECTION: LCD_WRITE_DAT_CMD(WRDAT,'9');
                        return 9;
//                case  Key_SET: LCD_WRITE_DAT_CMD(WRDAT,'.');
//                        return '.';
                default : return 0x00;
        }
}


/**************************************
** 說明:獲得鍵盤的值  
** 內部調用函數key_scan
** 輸出:實際鍵值
**************************************/
unsigned char run_key(unsigned char key_get)
{
        switch (key_get)
        {/*將按鍵碼轉換成鍵值*/
                case  Key_0_zero:
                        LCD_WRITE_DAT_CMD(WRDAT,'0');
                        return 0;
                case  Key_1_BLACK:
                        LCD_WRITE_DAT_CMD(WRDAT,'1');
                        return 1;
                case  Key_2_PRINT:
                        LCD_WRITE_DAT_CMD(WRDAT,'2');
                        return 2;
                case  Key_3_REPORT:
                        LCD_WRITE_DAT_CMD(WRDAT,'3');
                        return 3;
                case  Key_4_START:
                        LCD_WRITE_DAT_CMD(WRDAT,'4');
                        return 4;
                case  Key_5_CURVE: //進入標定程序
                        LCD_WRITE_DAT_CMD(WRDAT,'5');
                        return 5;
                case  Key_6_TIME:
                        LCD_WRITE_DAT_CMD(WRDAT,'6');
                        return 6;
                case  Key_7_CHECK:
                        LCD_WRITE_DAT_CMD(WRDAT,'7');
                        return 7;
                case  Key_8_SAVE:
                        LCD_WRITE_DAT_CMD(WRDAT,'8');
                        return 8;
                case  Key_9_CORRECTION:
                        LCD_WRITE_DAT_CMD(WRDAT,'9');
                        return 9;
                case  Key_OK:
                        return 'O';
                case  Key_Cannel:
                        return 'C';
                default : return 0xFF;
        }
}
extern unsigned char l_tmpdate[7];
//   0    1    2   3    4    5    6
//  秒分時日月周年09-11-20 12:00:00
void time_keynum_task(unsigned char ddram_addrc)
{
unsigned char key_test=0;
unsigned char i=1;
unsigned char j[8]={0};
        convertChar(X_SHI,Y_SHI,2,FANBAI,1);
        Read_RTC();

                j[2]=(l_tmpdate[2]/16)*10+l_tmpdate[2]%16;
                j[1]=(l_tmpdate[1]/16)*10+l_tmpdate[1]%16;
                j[0]=(l_tmpdate[0]/16)*10+l_tmpdate[0]%16;
                j[6]=(l_tmpdate[6]/16)*10+l_tmpdate[6]%16;
                j[4]=(l_tmpdate[4]/16)*10+l_tmpdate[4]%16;
                j[3]=(l_tmpdate[3]/16)*10+l_tmpdate[3]%16;
                j[5]=(l_tmpdate[5]/16)*10+l_tmpdate[5]%16;

        while(1)
        {
                Delay_ms(100);
                key_test = key_scan();
                if(key_test !=0)
                {       
                        if(key_test==Key_OK)
                        {
                                ALARM();
                                convertChar(X_XINGQI,Y_XINGQI,2,QUXIAOFANBAI,1);
                                convertChar(X_SHI,Y_SHI,2,QUXIAOFANBAI,1);
                                convertChar(X_FEN,Y_FEN,2,QUXIAOFANBAI,1);
                                convertChar(X_MIAO,Y_MIAO,2,QUXIAOFANBAI,1);
                                convertChar(X_NIAN,Y_NIAN,2,QUXIAOFANBAI,1);
                                convertChar(X_YUE,Y_YUE,2,QUXIAOFANBAI,1);
                                close_Cursor_Blink();
                                Set_RTC();
                                break;
                        }
                        else if(key_test==Key_Cannel)       
                        {
                                ALARM();
                                convertChar(X_XINGQI,Y_XINGQI,2,QUXIAOFANBAI,1);
                                convertChar(X_SHI,Y_SHI,2,QUXIAOFANBAI,1);
                                convertChar(X_FEN,Y_FEN,2,QUXIAOFANBAI,1);
                                convertChar(X_MIAO,Y_MIAO,2,QUXIAOFANBAI,1);
                                convertChar(X_NIAN,Y_NIAN,2,QUXIAOFANBAI,1);
                                convertChar(X_YUE,Y_YUE,2,QUXIAOFANBAI,1);
                                break;
                        }
                        else if(key_test==Key_6_TIME)
                        {
                                ALARM();
                                if(i==1)
                                {
                                        convertChar(X_SHI,Y_SHI,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_FEN,Y_FEN,2,FANBAI,1);
                                        i=2;
                                }//小時
                                else if(i==2)
                                {
                                        convertChar(X_FEN,Y_FEN,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_MIAO,Y_MIAO,2,FANBAI,1);
                                        //反白
                                        i=3;
                                }//分鐘
                                else if(i==3)
                                {
                                        convertChar(X_MIAO,Y_MIAO,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_NIAN,Y_NIAN,2,FANBAI,1);
                                        //反白
                                        i=4;
                                }//秒鐘
                                else if(i==4)
                                {
                                        convertChar(X_NIAN,Y_NIAN,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_YUE,Y_YUE,2,FANBAI,1);
                                        //反白
                                        i=5;
                                }//年
                                else if(i==5)
                                {
                                        convertChar(X_YUE,Y_YUE,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_RI,Y_RI,2,FANBAI,1);
                                        //反白
                                        i=6;
                                }//月
                                else if(i==6)
                                {
                                        convertChar(X_RI,Y_RI,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_XINGQI,Y_XINGQI,2,FANBAI,1);
                                        //反白
                                        i=7;
                                }//日
                       
                                else if(i==7)
                                {
                                        convertChar(X_XINGQI,Y_XINGQI,2,QUXIAOFANBAI,1);
                                        //取消反白
                                        convertChar(X_SHI,Y_SHI,2,FANBAI,1);
                                        //反白
                                        i=1;
                                }
                        }
                        else
                        {
                                if(i==1)
                                {
                                        j[2]=time_shi_keynum_task(0x81,key_test,j[2]);
                                        l_tmpdate[2]=(j[2]/10)*16+j[2]%10;
                                }//小時
                                else if(i==2)
                                {
                                        j[1]=time_feng_keynum_task(0x83,key_test,j[1]);
                                        l_tmpdate[1]=(j[1]/10)*16+j[1]%10;
                                }//分鐘
                                else if(i==3)
                                {
                                        j[0]=time_MIAO_keynum_task(0x85,key_test,j[0]);
                                        l_tmpdate[0]=(j[0]/10)*16+j[0]%10;
                                }//秒鐘
                                else if(i==4)
                                {
                                        j[6]=time_nian_keynum_task(0x91,key_test,j[6]);
                                        l_tmpdate[6]=(j[6]/10)*16+j[6]%10;
                                }//年
                                else if(i==5)
                                {
                                        j[4]=time_yue_keynum_task(0x93,key_test,j[4]);
                                        l_tmpdate[4]=(j[4]/10)*16+j[4]%10;
                                }//月
                                else if(i==6)
                                {
                                        j[3]=time_ri_keynum_task(0x95,key_test,j[3]);
                                        l_tmpdate[3]=(j[3]/10)*16+j[3]%10;
                                }//日
                       
                                else if(i==7)
                                {
                                        j[5]=time_xingqi_keynum_task(0x9a,key_test,j[5]);
                                        l_tmpdate[5]=(j[5]/10)*16+j[5]%10;
                                        if(j[5]==1)LCD_WRITE_STR_POSS(4,1,"星期一");
                                        else if(j[5]==2)LCD_WRITE_STR_POSS(4,1,"星期二");
                                        else if(j[5]==3)LCD_WRITE_STR_POSS(4,1,"星期三");
                                        else if(j[5]==4)LCD_WRITE_STR_POSS(4,1,"星期四");
                                        else if(j[5]==5)LCD_WRITE_STR_POSS(4,1,"星期五");
                                        else if(j[5]==6)LCD_WRITE_STR_POSS(4,1,"星期六");
                                        else if(j[5]==7)LCD_WRITE_STR_POSS(4,1,"星期日");
                                }
                        }
                }

        }

}



unsigned char time_shi_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        //反白
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==23)
                        j==23;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==0)
                        j=0;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');
        return(j);
}

unsigned char  time_feng_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==59)
                        j==59;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==0)
                        j=0;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');
return(j);
}
unsigned char  time_MIAO_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==59)
                        j==59;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==0)
                        j=0;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');
        return(j);
}

unsigned char  time_nian_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==99)
                        j==99;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==0)
                        j=0;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');
        return(j);
}

unsigned char  time_yue_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==12)
                        j==12;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==1)
                        j=1;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');
        return(j);
}

unsigned char  time_ri_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==32)
                        j==32;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==1)
                        j=1;
                else
                        j--;
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, j/10+'0');
        LCD_WRITE_DAT_CMD(WRDAT, j%10+'0');
        return(j);
}

unsigned char  time_xingqi_keynum_task(unsigned char ddram_addrc,unsigned char key_test,unsigned char j)
{
        if(key_test==Key_Down)
        {
                ALARM();
                if(j==7)
                        j==7;
                else
                        j++;
               
        }
        else if(key_test==Key_Up)
        {
                ALARM();
                if(j==1)
                        j=1;
                else
                        j--;
               
        }
        Display_Cursor_Blink(ddram_addrc);
        close_Cursor_Blink();
        LCD_WRITE_DAT_CMD(WRDAT, (j)%10+'0');

        if((j)==1)LCD_WRITE_STR_POSS(4,1,"星期一");
        else if((j)==2)LCD_WRITE_STR_POSS(4,1,"星期二");
        else if((j)==3)LCD_WRITE_STR_POSS(4,1,"星期三");
        else if((j)==4)LCD_WRITE_STR_POSS(4,1,"星期四");
        else if((j)==5)LCD_WRITE_STR_POSS(4,1,"星期五");
        else if((j)==6)LCD_WRITE_STR_POSS(4,1,"星期六");
        else if((j)==7)LCD_WRITE_STR_POSS(4,1,"星期日");
        return(j);
}
/****************************************Copyright (c)****************************************************--------------格式說明-------------------------------------------------------------------------------**:**                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0**                0        0        1        AC6        AC5        AC4        AC3        AC2        AC1        AC0*******************************************************************************************************/#include"main.h"

void LCD_set_XY(unsigned char x, unsigned char y){unsigned char X_ADDR;unsigned char Y_ADDR;        if(x==1)X_ADDR=0x80;        else if(x==2)X_ADDR=0x90;        else if(x==3)X_ADDR=0x88;        else if(x==4)X_ADDR=0x98;        Y_ADDR=X_ADDR+y;        LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);        LCD_WRITE_DAT_CMD(WRCMD,Y_ADDR);
}unsigned char LCD_read_XY(unsigned char x, unsigned char y){unsigned char X_ADDR;unsigned char Y_ADDR;        if(x==1)X_ADDR=0x80;        else if(x==2)X_ADDR=0x90;        else if(x==3)X_ADDR=0x88;        else if(x==4)X_ADDR=0x98;        Y_ADDR=X_ADDR+y;return(Y_ADDR);}
void Display_Cursor_Blink(unsigned char ucDDramAdd){        Serial_DDRAM_Address_Set(ucDDramAdd);        LCD_WRITE_DAT_CMD(WRCMD,0X0F);}void close_Cursor_Blink(void){//        Serial_DDRAM_Address_Set(ucDDramAdd);        LCD_WRITE_DAT_CMD(WRCMD,0X0c);}
unsigned char LCD_READByte(unsigned char cmd)//讀一字節{        unsigned char dat;        LCD_DATA_IN;
        WATE_LCD_NOBUSY();        LCDRS_1;        LCDRW_1;        LCDE_1;        Delay_us(10);        dat=LCD_DATA_PIN;        Delay_ms(1);        LCDE_0;        Delay_us(1);        LCD_DATA_OUT;        return dat;}
void WATE_LCD_NOBUSY( void )//忙檢測{        LCD_DATA_IN;        LCDRS_0;         LCDRW_1;         LCDE_1;         while((LCD_DATA_PIN&0x80)==0x80);         LCDE_0;         LCD_DATA_OUT;}

void LCD_WRITE_DAT_CMD(unsigned char cmd,unsigned char data)//寫命令/數據{        WATE_LCD_NOBUSY();        if(cmd==WRCMD)LCDRS_0;else LCDRS_1;        LCDRW_0;        LCDE_1;
        Delay_us(10);        LCD_DATA_PORT=data;        Delay_us(100);////////////////////在數據寫入的時候加入適當的延時 //65        ;        LCDE_0;}#if 0void  lcd_mesg(unsigned char *adder1){        unsigned char i;        LCD_WRITE_DAT_CMD(WRCMD,0x80);  //Set Graphic Display RAM Address        Delay_ms(100);        for(i=0;i<32;i++)        {                LCD_WRITE_DAT_CMD(WRDAT,*adder1);//TransferData(*adder1,1);                adder1++;        }
        LCD_WRITE_DAT_CMD(WRCMD,0x90);  //Set Graphic Display RAM Address        Delay_ms(100);        for(i=32;i<64;i++)        {                LCD_WRITE_DAT_CMD(WRDAT,*adder1);//TransferData(*adder1,1);                adder1++;        }}#endifvoid LCD_INIT(void) //初始化液晶{
        Delay_ms(100);             //大于40MS的延時程序        LCD_WRITE_DAT_CMD(WRCMD,0x30);  //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF        Delay_ms(100);            //大于100uS的延時程序        LCD_WRITE_DAT_CMD(WRCMD,0x30);  //Function Set        Delay_ms(50);             ////大于37uS的延時程序        LCD_WRITE_DAT_CMD(WRCMD,0x0C);  //Display Control,D=1,顯示開        Delay_ms(100);            //大于100uS的延時程序        LCD_WRITE_DAT_CMD(WRCMD,0x01);  //Display Clear        Delay_ms(500);             //大于10mS的延時程序        LCD_WRITE_DAT_CMD(WRCMD,0x06);  //Enry Mode Set,光標從右向左加1位移動        Delay_ms(100);            //大于100uS的延時程序
}
void lcd_clear(void)        //清屏函數{LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);LCD_WRITE_DAT_CMD(WRCMD,0x01);}
void BMP_clear( void )// 清圖形函數 {     unsigned char i,j;     LCD_WRITE_DAT_CMD(WRCMD,EXTEND_FUNCTION);      //8Bit擴充指令集,即使是36H也要寫兩次     LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);      //繪圖ON,基本指令集里面36H不能開繪圖     for(i=0;i<32;i++)            //12864實際為256x32     {           LCD_WRITE_DAT_CMD(WRCMD,0x80|i);      //行位置           LCD_WRITE_DAT_CMD(WRCMD,0x80);      //列位置           for(j=0;j<32;j++)            //256/8=32 byte                LCD_WRITE_DAT_CMD(WRDAT,0);     }}
void TXT_Clear( void )//清文本函數{unsigned char i;     LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);      //8BitMCU,基本指令集合 //        Delay_ms(10);    LCD_WRITE_DAT_CMD(WRCMD,0x80);      //AC歸起始位     for(i=0;i<64;i++) {                // Delay_us(10);     LCD_WRITE_DAT_CMD(WRDAT,0x20);}}
void Overturn_1_line( unsigned char line_cmd)//{//unsigned char i;        LCD_WRITE_DAT_CMD(WRCMD,EXTEND_FUNCTION);      //8BitMCU,EXTEND指令集合        LCD_WRITE_DAT_CMD(WRCMD,line_cmd);}
void LCD_WRITE_STR_POSS(unsigned char x,unsigned char y,unsigned char *buff)//光標定位函數{unsigned char addr,i=0;        if(x==1)addr=0x80;        if(x==2)addr=0x90;        if(x==3)addr=0x88;        if(x==4)addr=0x98;        addr=addr+y;        LCD_WRITE_DAT_CMD(WRCMD,0x30);//        Delay_us(10);        LCD_WRITE_DAT_CMD(WRCMD,addr);
        while(buff[i]!='\0')        {           LCD_WRITE_DAT_CMD(WRDAT,buff[i]);//        Delay_us(10);           i++;        }}


//=======================================================================

/*void w_12864bmp(unsigned char *puts)//繪圖函數{unsigned int x=0;unsigned char i,j;        LCD_WRITE_DAT_CMD(WRCMD,0x34); //擴展指令        LCD_WRITE_DAT_CMD(WRCMD,0x36); //打開繪圖        for(i=0;i<32;i++)        {           LCD_WRITE_DAT_CMD(WRCMD,0x80|i);//列32行,雙屏結構中上半屏            LCD_WRITE_DAT_CMD(WRCMD,0x80); //X地址坐標,自動加1.           for(j=0;j<16;j++) //16*8=256             LCD_WRITE_DAT_CMD(WRDAT,puts[x++]);                  }        for(i=0;i<32;i++)        {           LCD_WRITE_DAT_CMD(WRCMD,0x80|i);           LCD_WRITE_DAT_CMD(WRCMD,0x88); //下半屏           for(j=0;j<16;j++)             LCD_WRITE_DAT_CMD(WRDAT,puts[x++]);}
}
void Display_China(unsigned char X, unsigned char Y,unsigned char *Tmp_point){unsigned char i;        while(*(Tmp_point+i) != 0)//判斷字符串長度                i ++;                    LCD_set_XY(X,Y);        for( ;i;i --)        {                LCD_WRITE_DAT_CMD(WRDAT,*Tmp_point++);                LCD_WRITE_DAT_CMD(WRDAT,*(Tmp_point++));        }}
void Display_English(unsigned char X, unsigned char Y,unsigned char *Tmp_point){         unsigned char i;        while(*(Tmp_point+i) != 0)//判斷字符串長度                i ++;            LCD_set_XY(X,Y);        for( ;i;i --)                LCD_WRITE_DAT_CMD(WRDAT, *(Tmp_point++));               
}
char char2hex(char num)  //字符型轉化成ASCII碼{        num        &=        0x0f;        if(num<10)return(num+0x30);        else return(num+0x61-0x0a);}char *unsigned char2hex(unsigned char num){        static char tc[3]={'\0','\0','\0'};                tc[0] = char2hex((unsigned char)(num>>4));        tc[1] = char2hex((unsigned char)(num));        return(tc);}char *int2hex(int num){        static char tc[5]={'\0','\0','\0','\0','\0'};                tc[0] = char2hex((unsigned char)(num>>12));//強制轉化成字符型        tc[1] = char2hex((unsigned char)(num>>8));        tc[2] = char2hex((unsigned char)(num>>4));        tc[3] = char2hex((unsigned char)(num));        return(tc);}char *hex2int8(unsigned char num){        static char tc[4]={'\0','\0','\0','\0'};                tc[0] = ((num/100)&0x03)+0x30;        tc[1] = ((num/10)%10)+0x30;        tc[2] = (num%10)+0x30;        return(tc);}*/


//*************************************************************//*函數名稱:void LCD_DDRAM_AddressSet(unsigned char ucDDramAdd) *//*函數功能:設定DDRAM(文本區)地址到地址計數器AC                                  *//*形式參數:unsigned char ucDDramAdd                                                                  *//*行參說明:具體地址                                                                                  *//*格式說明:                                                                                                  *//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                  *//*                0        0        1        AC6        AC5        AC4        AC3        AC2        AC1        AC0                                  *//*返回參數:無                                                                                                  *//*使用說明:                                                                                                  *//*        第一行地址:80H~8FH                                                                                  *//*        第二行地址:90H~9FH                                                                                  *//*        第三行地址:A0H~AFH                                                                                  *//*        第四行地址:B0H~BFH                                                                                  *//*************************************************************void Serial_DDRAM_Address_Set(unsigned char ucDDramAdd){        LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                        //基本指令集        LCD_WRITE_DAT_CMD(WRCMD,ucDDramAdd);                                //設定DDRAM地址到地址計數器AC}#if 0//*************************************************************//*函數名稱:void LCD_CGRAM_AddressSet(unsigned char ucCGramAdd) *//*函數功能:設定CGRAM(自定義字庫區)地址到地址計數器AC                  *//*形式參數:unsigned char ucCGramAdd                                                                  *//*形參說明:具體地址                                                                                  *//*格式說明:                                                                                                  *//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                  *//*                0        0        0        1        AC5        AC4        AC3        AC2        AC1        AC0                                  *//*返回參數:無                                                                                                  *//*使用說明:地址范圍為40H~3FH                                                                  *//*************************************************************void LCD_CGRAM_AddressSet(unsigned char ucCGramAdd){        LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                        //基本指令集        LCD_WRITE_DAT_CMD(WRCMD,ucCGramAdd);                                //設定CGRAM地址到地址計數器AC}
//*******************************************************************************//*函數名稱:void LCD_GDRAM_AddressSet(unsigned char ucGDramAdd)                   *//*函數功能:設定GDRAM(圖形區)地址到地址計數器AC                                 *//*形式參數:unsigned char ucGDramAdd                                                    *//*形參說明:具體地址值                                                          *//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                 *//*                0        0        1        AC6        AC5        AC4        AC3        AC2        AC1        AC0                                 *//*                先設定垂直位置再設定水平位置(連續寫入兩個字節完成垂直和水平位置的設置)  *        //*                垂直地址范圍:AC6~AC0                                                    *//*                水平地址范圍:AC3~AC0                                                    *//*返回參數:無                                                                  *//*使用說明:必須在擴展指令集的情況下使用                                        *//*******************************************************************************void LCD_GDRAM_AddressSet(unsigned char ucGDramAdd){        LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                        //擴展指令集        LCD_WRITE_DAT_CMD(WRCMD,ucGDramAdd);                }
#endif//**********************************************************
//函數名稱:Overturn_Char(unsigned char x,unsigned char y,unsigned char cor)//函數功能:使用繪圖的方法讓一個16*8的字符反白//形式參數:uunsigned char x,unsigned char y,unsigned char wide,unsigned char cor//                        x取值范圍:1~16//                        y取值范圍:1~4//          wide取值范圍:1~16//行參說明:坐標水平位置,坐標垂直位置,反白行數,要反白還是清除(1:反白,2:清除)//液晶屏坐標說明://                _______________128個象素______________________//                |(1,1)                                                                    (16,1)|        //                |                                                                                          |        //        6        |                                                                                          |        //        4        |                                                                                  |//        個        |                                                                                    |        //        象        |                                                                                          |        //        素        |                                                                                          |//                |(1,4)__________________________________(16,4)|////返回參數:無//使用說明:無//**********************************************************void Overturn_Char(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor){    unsigned char i,base_x,colour;        if(cor == 1) colour = 0xFF;        if(cor == 0) colour = 0x00;        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);        if(y == 1 || y == 2)    base_x = 0x80;        if(y == 3 || y == 4)    base_x = 0x88;    if(x % 2)        {            for(i = 0;i < wide; i ++)                {                LCD_WRITE_DAT_CMD(WRCMD,0X80 - 16 + y * 16 + i);                LCD_WRITE_DAT_CMD(WRCMD,base_x+(x/2));                     LCD_WRITE_DAT_CMD(WRDAT,colour);                    LCD_WRITE_DAT_CMD(WRDAT,0x00);                }        }        else        {            for(i = 0;i < wide; i ++)                {                LCD_WRITE_DAT_CMD(WRCMD,0X80 - 16 + y * 16 + i);                LCD_WRITE_DAT_CMD(WRCMD,base_x+(x/2)-1);                     LCD_WRITE_DAT_CMD(WRDAT,0x00);                    LCD_WRITE_DAT_CMD(WRDAT,colour);                }        }                LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);                }
#if 0//**********************************************************//函數名稱:Overturn_Font(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor)//函數功能:使用繪圖的方法讓一個16*16的漢字符反白//形式參數:uunsigned char x,unsigned char y,unsigned char wide,unsigned char cor//                        x取值范圍:1~8//                        y取值范圍:1~4//          wide取值范圍:1~16//行參說明:坐標水平位置,坐標垂直位置,反白行數,要反白還是清除(1:反白,2:清除)//液晶屏坐標說明://                _______________128個象素______________________//                |(1,1)                                                                     (8,1)|        //                |                                                                                          |        //        6        |                                                                                          |        //        4        |                                                                                  |//        個        |                                                                                    |        //        象        |                                                                                          |        //        素        |                                                                                          |//                |(1,4)___________________________________(8,4)|////返回參數:無//使用說明:無//**********************************************************void Overturn_Font(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor){    unsigned char i,base_x,colour;        if(cor == 1) colour = 0xFF;        if(cor == 0) colour = 0x00;        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);        if(y == 1 || y == 2)    base_x = 0x80;        if(y == 3 || y == 4)    base_x = 0x88;            for(i = 0;i < wide;i ++)        {            LCD_WRITE_DAT_CMD(WRCMD,0X80 - 16 + y * 16 + i); //- 16 + y * 16 + i);            LCD_WRITE_DAT_CMD(WRCMD,base_x+x-1);                 LCD_WRITE_DAT_CMD(WRDAT,colour);                LCD_WRITE_DAT_CMD(WRDAT,colour);        }        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);}
#endif
/******************************************************************************//應用程序用的反白程序////CX為所要反白的行,CY為所要反白的起始列(0-16),width為反白的終止列.//建立日期:2008/04/14//                _______________128個象素______________________//                |(1,1)                                                                     (8,1)|        //                |                                                                                          |        //        6        |                                                                                          |        //        4        |                                                                                  |//        個        |                                                                                    |        //        象        |                                                                                          |        //        素        |                                                                                          |//                |(1,4)___________________________________(8,4)|///******************************************************************************/void convertChar (unsigned char CX, unsigned char CY, unsigned char width,unsigned char YN,unsigned char f) {unsigned char halfLineCnt, basicBlock,lcdPosX,lcdPosY;        LCD_WRITE_DAT_CMD(WRCMD,EXTEND_FUNCTION);
//        if(f==1)        BMP_clear(); //清繪圖區        lcdPosY = 0x80;
        if (CX == 0)        {CX = 0x80;        halfLineCnt = 16;        }        else if (CX == 1)        {CX = 0x80;        halfLineCnt = 32;        }        else if (CX == 2)        {CX = 0x88;        halfLineCnt = 16;        }        else if (CX == 3)        {CX = 0x88;        halfLineCnt = 32;        }        lcdPosX = CX + CY;
        for (; halfLineCnt != 0; halfLineCnt--)        {                basicBlock = width;                LCD_WRITE_DAT_CMD(WRCMD,EXTEND_FUNCTION);                LCD_WRITE_DAT_CMD(WRCMD,lcdPosY);      //行位置                LCD_WRITE_DAT_CMD(WRCMD,lcdPosX);      //列位置                LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                for (;basicBlock != 0; basicBlock--)                {                        if (halfLineCnt > 16)                        {                                LCD_WRITE_DAT_CMD(WRDAT,0x00);                        }                        else                        {                                if(YN==1)                                    LCD_WRITE_DAT_CMD(WRDAT,0xff);                                else      LCD_WRITE_DAT_CMD(WRDAT,0x00);                        }                }        lcdPosY++;        }        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);        LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);}/******************************************************************************/



        #if 0
//******************************************************************************//*****************以上為并行工作模式下的基本函數*******************************//******************************************************************************//*********以下為并行工作模式下的功能函數,由基本函數組成************************//******************************************************************************
/***********************************************************第一行:80H ~ 87H第二行:90H ~ 97H第三行:88H ~ 8FH第四行:98H ~ 9FH***********************************************************/
//**********************************************************//函數名稱:void Serial_DisplayOneChineseCharacter_WithAddress(unsigned char ucAdd,unsigned char code *p)//函數功能:在(文本區)ucAdd指定的位置顯示一個漢字(16*16點陣)//形式參數:unsigned char ucAdd,unsigned char code *p//行參說明:指定的位置,要顯示的漢字//地址必須是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.//返回參數:無//使用說明:使用之前要初始化液晶//**********************************************************void Serial_DisplayOneChineseCharacter_WithAddress(unsigned char ucAdd,unsigned char *p){    NOP();          LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                          //基本指令動作           Serial_DDRAM_Address_Set(ucAdd);        LCD_WRITE_DAT_CMD(WRDAT,*p);        LCD_WRITE_DAT_CMD(WRDAT,*(p+1));                                                }
//**********************************************************//函數名稱:void Serial_DisplayOneASCIICharacter_WithAddress(unsigned char ucAdd,unsigned char ucchar)//函數功能:在(文本區)ucAdd指定的位置顯示一個ASCII字符(16*8點陣)//形式參數:unsigned char ucAdd,unsigned char ucchar//地址必須是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.//行參說明:指定的位置,要顯示的字符//返回參數:無//使用說明:使用之前要初始化液晶//**********************************************************void Serial_DisplayOneASCIICharacter_WithAddress(unsigned char ucAdd,unsigned char ucchar){    NOP();          LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                          //基本指令動作           Serial_DDRAM_Address_Set(ucAdd);        LCD_WRITE_DAT_CMD(WRDAT,ucchar);                                }
//**********************************************************//函數名稱:void Serial_DisplayStrings_WithAddress(unsigned char ucAdd,unsigned char code *p)//函數功能:在(文本區)ucAdd指定的位置顯示一串字符(或是漢字或是ASCII或是兩者混合)//形式參數:unsigned char ucAdd,unsigned char code *p//行參說明:指定的位置,要顯示的字符串//地址必須是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.//返回參數:無//使用說明:使用之前要初始化液晶]//注意:如果其中的16*8字符個數為奇數,則需要插入空格補位//**********************************************************void Serial_DisplayStrings_WithAddress(unsigned char ucAdd,unsigned char *p){        unsigned char i = 0;        while(*(p+i) != 0)//判斷字符串長度                i ++;          LCD_WRITE_DAT_CMD(WRCMD,BASIC_FUNCTION);                          //基本指令動作           Serial_DDRAM_Address_Set(ucAdd);        for( ;i;i --)                LCD_WRITE_DAT_CMD(WRDAT, *(p++));                                        }
//**********************************************************//函數名稱:void Serial_UpRollOneLine(unsigned char ucN)//函數功能:DDRAM(文本區)內容垂直上卷ucN行                //形式參數:unsigned char ucN//行參說明:上卷的行數:0~3//返回參數:無//使用說明:無//注意:該函數不是非常好用,請盡量不要使用//**********************************************************void Serial_UpRollOneLine(unsigned char ucN){        LCD_WRITE_DAT_CMD(WRCMD,EXTEND_FUNCTION);          //擴展指令集        LCD_WRITE_DAT_CMD(WRCMD,ROLLADDRESS_ON);                  //允許輸入卷動位址        LCD_WRITE_DAT_CMD(WRCMD,0x40+ucN*0x10);                  //上卷ucN行}
//**********************************************************//函數名稱:void Serial_ImgDisplay(flash unsigned char *pic)//函數功能:全屏顯示128*64個象素的圖形//形式參數:unsigned char code *img//行參說明:要顯示的圖形//液晶屏坐標說明://                _______________________________________________//                |(1,1)                                                                   (128,1)|        //                |                                                                                          |        //                |                                                                                          |        //                |                                                                                          |//                |                                                                                      |        //                |                                                                                          |        //                |                                                                                          |//                |(1,64)_______________________________(128,64)|////返回參數:無//使用說明:此函數適用于st7920型液晶,并且需要將圖片存于FLASH中//**********************************************************void Serial_ImgDisplay(flash unsigned char *pic){         unsigned int x=0;         unsigned char i,j;         LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);                 //擴展指令動作
        for(i=0;i<32;i++)                   //上半屏顯示         {                LCD_WRITE_DAT_CMD(WRCMD,0x80|i);             //列位置                 LCD_WRITE_DAT_CMD(WRCMD,0x80);               //行位置                 for(j=0;j<16;j++)                 //256/8=32 byte                 {                           //列位置每行自動增加                         LCD_WRITE_DAT_CMD(WRDAT,*pic);                         pic++;                 }         }
        for(i=0;i<32;i++)                   //下半屏顯示         {                 LCD_WRITE_DAT_CMD(WRCMD,0x80|i);               //列位置                 LCD_WRITE_DAT_CMD(WRCMD,0x88);               //行位置                 for(j=0;j<16;j++)                 //256/8=32 byte                 {                         LCD_WRITE_DAT_CMD(WRDAT,*pic);                         pic++;                 }         }        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);                 //擴展指令動作         LCD_WRITE_DAT_CMD(WRCMD,0x30); }
//**********************************************************//函數名稱:void Serial_ImgDisplayCharacter(unsigned char x,unsigned char y,unsigned char code *img)//函數功能:使用繪圖的方法,在(x,y)處畫一個16*16點陣的圖案,也可以是字符//形式參數:unsigned char x,unsigned char y,unsigned char code *img//                        x取值范圍:0~15//                        y取值范圍:0~32 (針對OCMJ4X8C 12864型液晶)        //行參說明:坐標水平位置,坐標垂直位置,要顯示的圖形//液晶屏坐標說明://                _______________128個象素______________________//                |(0,0)                                                                     (7,0)|        //                |                                                                                          |        //        6        |                                                                                          |        //        4        |(0,31)                                                                        (7,31)|//        個        |(8,0)                                                                        (15,0)|        //        象        |                                                                                          |        //        素        |                                                                                          |//                |(8,31)________________________________(15,31)|////返回參數:無//使用說明:此函數適用于st7920 12864型液晶//**********************************************************void Serial_ImgDisplayCharacter(unsigned char x,unsigned char y,flash unsigned char img[]){          unsigned char i;         LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);                        //先關閉圖形顯示功能    for(i=0;i<16;i++)           {
                      LCD_WRITE_DAT_CMD(WRCMD,0x80+y+i);                      LCD_WRITE_DAT_CMD(WRCMD,0x80+x);                      LCD_WRITE_DAT_CMD(WRDAT,img[i*2]);                      LCD_WRITE_DAT_CMD(WRDAT,img[i*2+1]);           }        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);                                //最后打開圖形顯示功能}void Serial_ImgDisplayCharacter1(unsigned char x,unsigned char y,unsigned char m,unsigned char n,flash unsigned char img[]){          unsigned char i;         LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);                        //先關閉圖形顯示功能    for(i=0;i<16;i++)           {
                      LCD_WRITE_DAT_CMD(WRCMD,0x80+y+i);                      LCD_WRITE_DAT_CMD(WRCMD,0x80+x);                      LCD_WRITE_DAT_CMD(WRDAT,img[i*2]);                      LCD_WRITE_DAT_CMD(WRDAT,img[i*2+1]);           }        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);                                //最后打開圖形顯示功能}

//**********************************************************//函數名稱:void GUI_FontAnywhere(unsigned char x,unsigned char y,//         unsigned char m,unsigned char n,flash unsigned char img[])//函數功能:使用繪圖的方法,在(x,y)處畫一個m*n大小的點陣的圖案,也可以是字符//形式參數:unsigned char x,unsigned char y,unsigned char m,//         unsigned char n,flash unsigned char img[]//                        x取值范圍:1~128//                        y取值范圍:1~64 //行參說明:坐標水平位置,坐標垂直位置,要顯示的圖形長 m(只能為8的倍數),//         要顯示的圖形的寬 n,字模//液晶屏坐標說明://                _______________128個象素______________________//                |(1,1)                                                                   (128,1)|        //                |                                                                                          |        //        6        |                                                                                          |        //        4        |                                                                                  |//        個        |                                                                                    |        //        象        |                                                                                          |        //        素        |                                                                                          |//                |(1,64)_______________________________(128,64)|////返回參數:無//使用說明:橫坐標必須為8的倍數//**********************************************************void GUI_FontAnywhere(unsigned char x,unsigned char y,unsigned char m,unsigned char n,flash unsigned char img[]){           unsigned char i,j,count = 0;        unsigned int a = 0;        unsigned char p = 0,q = 0;        unsigned char bit[8];
        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_OFF);                        //先關閉圖形顯示功能    for(p=0;p<n;p++)                for(q=0;q<(m/8);q++)                  {                        for(i = 0;i < 8;i ++)                            bit[i] = ((img[a]<<i)>>7);                        for(i = 0;i < 8;i ++)                            GUI_Point(x+i+(q*8),y+p,bit[i]);                    a ++;                }               
        LCD_WRITE_DAT_CMD(WRCMD,GRAPH_ON);                                //最后打開圖形顯示功能}

//**********************************************************// 名稱:GUI_Point(unsigned char y,unsigned char x,unsigned colour)// 功能:在指定位置上畫點。// 入口參數:x                指定點所在行的位置//           y                指定點所在列的位置//          color             顯示顏色(對于黑白色LCD12864,為0時滅,為1時顯示)// 出口參數:無//**********************************************************void GUI_Point(unsigned char y,unsigned char x,unsigned colour){    unsigned char GDRAM_hbit,GDRAM_lbit;    unsigned char x_Dyte,x_byte;                 //定義列地址的字節位,及在字節中的哪1位     unsigned char y_Dyte,y_byte;            x--;y--;                                                                         //定義為上下兩個屏(取值為0,1),行地址(取值為0~31)    /***X,Y坐標互換,即普通的X,Y坐標***/    x_Dyte=y/16;                                         //計算在16個字節中的哪一個    x_byte=y&0x0f;                                     //計算在該字節中的哪一位    y_Dyte=x/32;                                         //0為上半屏,1為下半屏    y_byte=x&0x1f;                                     //計算在0~31當中的哪一行        LCD_WRITE_DAT_CMD(WRCMD,0x80+y_byte);                     //設定行地址(y坐標)    LCD_WRITE_DAT_CMD(WRCMD,0x80+x_Dyte+8*y_Dyte);         //設定列地址(x坐標),并通過8*y_Dyte選定上下屏                             //   LCD12864_Read(); //   GDRAM_hbit=LCD12864_Read();                         //讀取當前顯示高8位數據 //   GDRAM_lbit=LCD12864_Read();                         //讀取當前顯示低8位數據        GDRAM_lbit=LCD_READByte(0xfe);                         //讀取當前顯示數據        Delay_us(1);         if(colour==1)    {                 LCD_WRITE_DAT_CMD(WRCMD,0x80+y_byte);                     //設定行地址(y坐標)                LCD_WRITE_DAT_CMD(WRCMD,0x80+x_Dyte+8*y_Dyte);         //設定列地址(x坐標),并通過8*y_Dyte選定上下屏                Delay_us(1);
        if(x_byte<8)                                             //判斷其在高8位,還是在低8位                {                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_hbit|(0X01<<(7-x_byte)));     //顯示GDRAM區高8位數據                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_lbit);                             //顯示GDRAM區低8位數據         }        else        {                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_hbit);                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_lbit|(0x01<<(15-x_byte)));        }     }    else    {                LCD_WRITE_DAT_CMD(WRCMD,0x80+y_byte);                     //設定行地址(y坐標)                LCD_WRITE_DAT_CMD(WRCMD,0x80+x_Dyte+8*y_Dyte);         //設定列地址(x坐標),并通過8*y_Dyte選定上下屏                Delay_us(1);
        if(x_byte<8)                                             //判斷其在高8位,還是在低8位                {                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_hbit & ~(0X01<<(7-x_byte)));     //顯示GDRAM區高8位數據                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_lbit);                             //顯示GDRAM區低8位數據         }        else        {                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_hbit);                        LCD_WRITE_DAT_CMD(WRDAT,GDRAM_lbit & ~(0x01<<(15-x_byte)));        }         }         }

/************************************************************ 名稱:GUI_Line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char colour)* 功能:在指定位置上畫線。* 入口參數:x0                指定線起點所在行的位置*           y0           指定線起點所在列的位置*           x1                指定線終點所在行的位置*           y1           指定線終點所在列的位置*          color             顯示顏色(對于黑白色LCM,為0時滅,為1時顯示)* 出口參數:無/**********************************************************/void GUI_Line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char colour){    int temp;    int dx,dy;               //定義起點到終點的橫、縱坐標增加值    int s1,s2,status,i;    int Dx,Dy,sub;
    dx = x1 - x0;    if(dx >= 0)                 //X的方向是增加的        s1 = 1;    else                     //X的方向是降低的        s1 = -1;         dy = y1 - y0;                 //判斷Y的方向是增加還是降到的    if(dy >= 0)        s2 = 1;    else        s2 =- 1;      Dx = abs(x1-x0);             //計算橫、縱標志增加值的絕對值    Dy = abs(y1-y0);           if(Dy > Dx)                                  {                     //以45度角為分界線,靠進Y軸是status=1,靠近X軸是status=0         temp = Dx;        Dx = Dy;        Dy = temp;    status = 1;    }     else        status = 0;

/*********Bresenham算法畫任意兩點間的直線********/     sub = Dy + Dy - Dx;                 //第1次判斷下個點的位置    for(i = 0;i < Dx;i ++)    {         GUI_Point(x0,y0,colour);           //畫點         if(sub >= 0)                                       {             if(status == 1)               //在靠近Y軸區,x值加1                x0 += s1;             else                     //在靠近X軸區,y值加1                               y0 += s2;             sub -= (Dx + Dx);                 //判斷下下個點的位置         }         if(status == 1)            y0 += s2;         else                   x0 += s1;         sub += Dy + Dy;             } }

       
/***************************************************************************** 名稱:plotC(int x,int y,int xc,int yc,unsigned char colour)* 功能:八分點畫圓函數* 入口參數:x                指定線起點所在行的位置*           y           指定線起點所在列的位置*          color             顯示顏色(對于黑白色LCM,為0時滅,為1時顯示)* 出口參數:無****************************************************************************/void plotC(int x,int y,int xc,int yc,unsigned char colour){    GUI_Point(xc+x,yc+y,colour);    GUI_Point(xc+x,yc-y,colour);    GUI_Point(xc-x,yc+y,colour);    GUI_Point(xc-x,yc-y,colour);    GUI_Point(xc+y,yc+x,colour);    GUI_Point(xc+y,yc-x,colour);    GUI_Point(xc-y,yc+x,colour);    GUI_Point(xc-y,yc-x,colour);}
/***************************************************************************** 名稱:GUI_Circle(int xc,int yc,int r,unsigned char colour)* 功能:畫圓* 入口參數:xc                圓心的行坐標*           yc           圓心的列坐標*           r                半徑*          color             顯示顏色(對于黑白色LCM,為0時滅,為1時顯示)* 出口參數:無****************************************************************************/void GUI_Circle(int xc,int yc,int r,unsigned char colour){    int x,y,d;    y = r;    d = 3 - (r + r);    x = 0;    while(x <= y)    {        plotC(x,y,xc,yc,colour);        if(d < 0)            d += (x + x + x + x) + 6;        else        {            d+=((x - y) + (x - y) + (x - y) + (x - y)) + 10;            y = y - 1;        }        x = x + 1;    }}
/***************************************************************************** 名稱:GUI_Full(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char colour)* 功能:用繪圖的方法填充一個矩形* 入口參數:x0                起始點橫坐標*           y0           起始點縱坐標*           x1                終止點橫坐標*           y1      終止點縱坐標*          color             顯示顏色(對于黑白色LCM,為0時滅,為1時顯示)* 出口參數:無****************************************************************************/void GUI_Full(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char colour){    unsigned char i,j;        for(j = y0;j <= y1;j ++)            for(i = x0;i <= x1;i ++)                    GUI_Point(i,j,colour);}#endif//根據朗伯比爾計算吸光度濃度和曲線擬合#include "main.h"

float Clac_Absorbance_600nm(float tem_I,float tem_Ib,float tem_I0,float T_TEST){        float tem1;        float tem2;        float tem_ABS;
//I0>=I        tem1=(tem_I0-tem_Ib);        tem2=(tem_I-tem_Ib);        if(tem2>tem1)        {                tem_ABS = 0;        }        else        {                tem_ABS = log10f(tem1/tem2);        }        T_TEST=tem2/tem1;return tem_ABS; }float Clac_COD(float abs,float k,float b){        return(k*(fabsf(abs))+b);}float Clac_b(float abs,float k,float cod){        return(cod - k*(fabsf(abs)));}float Clac_k(float abs,float cod){        return(cod/(fabsf(abs)));}
unsigned char ONPLAY_cod_K_LCD(float temp_d,unsigned char x, unsigned char y,unsigned char i){unsigned long temp_c;unsigned char num_line;        LCD_set_XY(x,y);        if(temp_d==0)        {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('0')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('0')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(' ')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(' ')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(' ')));                i=6;        }        else{        if(temp_d>=1000)        {                temp_c = (unsigned long)fabsf(temp_d*10);                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/10000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%10000)/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));                i=6;        }        else if(temp_d>=100)        {                temp_c = (unsigned long)fabsf(temp_d*100);                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/10000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%10000)/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));                i=6;        }        else if(temp_d>=10)        {                temp_c = (unsigned long)fabsf(temp_d*1000);                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/10000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%10000)/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));                i=6;        }        else if(temp_d>1)        {                temp_c = (unsigned long)fabsf(temp_d*1000);                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));                i=6;        }        else         {                temp_c = (unsigned long)fabsf(temp_d*1000);                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('0')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)('.')));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));                i=6;        }                }num_line=i;return num_line;
}
void ONPLAY_ABS_LCD(unsigned char x, unsigned char y,float Absorbance){unsigned int temp_d;float temp;        LCD_set_XY(x,y);        temp = fabsf(Absorbance*1000);        temp_d = (uint)temp;        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d/1000+'0'));        LCD_WRITE_DAT_CMD(WRDAT,'.');        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)((temp_d%1000)/100+'0'));        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%100/10+'0'));        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%10+'0'));//        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%10+'0'));        LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));
}void ONPLAY_ABS_10000_LCD(unsigned char x, unsigned char y,unsigned int Absorbance){unsigned int temp_d;        temp_d = Absorbance;        LCD_set_XY(x,y);        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d/10000+'0'));        LCD_WRITE_DAT_CMD(WRDAT,'.');        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)((temp_d%10000)/1000+'0'));        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%1000/100+'0'));        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%100/10+'0'));//        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_d%10+'0'));        LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));}
void ONPLAY_K_LCD(float temp_d,unsigned char x, unsigned char y){unsigned int temp_c;unsigned int  temp_e;        LCD_set_XY(x,y);        if(temp_d>0)        {                temp_c = (unsigned int)temp_d;        }        else        {                temp_c = (unsigned int)fabsf(temp_d);                LCD_WRITE_STR_POSS(x,y,"-");        }        if(temp_c/10000!=0)        {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/10000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%10000)/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));        }        else if(temp_c/1000!=0)        {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/1000)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%1000)/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));        }        else if(temp_c/100!=0)        {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/100)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)((temp_c%100)/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));        }        else if(temp_c/10!=0)        {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c/10)+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));        }        else         {                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)(temp_c%10)+'0'));        }        if(temp_c!=0)        {                temp_e= (uint)((temp_d/(float)temp_c)*1000.0);
                LCD_WRITE_DAT_CMD(WRDAT,'.');                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)((temp_e%1000)/100+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_e%100/10+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_e%10+'0'));        }        else        {                temp_e= (uint)(temp_d*1000.0);
                LCD_WRITE_DAT_CMD(WRDAT,'.');                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)((temp_e%1000)/100+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_e%100/10+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_e%10+'0'));        }}
void ONPLAY_Cod_and_K_LCD(unsigned char x, unsigned char y,float temp_cod){        unsigned int temp_r;        LCD_set_XY(x,y);        if(temp_cod<10)        {                temp_r=temp_cod*1000;                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r/1000+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)('.'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));        }        else        {                if(temp_cod > 60000)                {                        temp_r=(unsigned int)temp_cod;                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)('e'));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)('e'));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)('r'));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(' '));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(' '));                        LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));
                }                else if(temp_cod >= 6000)                {                        temp_r=(unsigned int)temp_cod;                        if(temp_r/10000 >0)                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r/10000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));                        }                        else                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));                        }
                }                else if(temp_cod >= 600)                {                        temp_r=(unsigned int)(temp_cod*10);                        if(temp_r/10000 >0)                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r/10000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)'.'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                        }                        else                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)'.'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));                        }                }                else if(temp_cod >= 60)                {                        temp_r=(unsigned int)(temp_cod*100);                        if(temp_r/10000 >0)                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r/10000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)'.'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                        }                        else                        {                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)'.'));                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                                LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)' '));                        }                }                else                 {                        temp_r=(unsigned int)(temp_cod*1000);                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r/10000+'0'));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10000/1000+'0'));                        LCD_WRITE_DAT_CMD(WRDAT,((unsigned char)'.'));                        LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%1000/100+'0'));                                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%100/10+'0'));                                                LCD_WRITE_DAT_CMD(WRDAT,(unsigned char)(temp_r%10+'0'));                }
        }}
#ifdef POLYFITfloat sum(float *a, uint n) { float sum = 0.0; uint i;
        for(i = 0; i < n; i ++)         sum += a[i];
return sum; }
float sum_ab(float *a,float *b, uint n) { float sum = 0.0; uint i;
        for(i = 0; i < n; i ++)         sum += (a[i]*b[i]);
return sum; } float sum_aa(float *y, uint n) { float sum = 0.0; uint i; unsigned long sum1=0;        for(i = 0; i < n; i ++)         {                        sum1 +=(unsigned long) (y[i]*y[i]);         }        sum = (float)(sum1/10000);        return sum; }
float average(float *a, uint n) {         return sum(a, n) / (float)n; }
float linearregression(float *x, float *y, unsigned int n, float a, float b,float r_line, float s_line) {         float sum_x, sum_y;         float sum_xx, sum_xy,sum_yy;         float xavg, yavg;         float LXY, LXX;         float tem1;        float tem2;        float k;        uint i;
        sum_xx = sum_ab(x, x,n);         sum_xy = sum_ab(x, y,n);         sum_yy = sum_aa(y,n); #ifndef DEBUG_SIMULATOR        TXT_Clear();        LCD_WRITE_STR_POSS(1,0,"sumxx=");        ONPLAY_K_LCD(sum_xx,1, 3);        LCD_WRITE_STR_POSS(2,0,"sumxy=");        ONPLAY_K_LCD(sum_xy,2, 3);        LCD_WRITE_STR_POSS(3,0,"sumyy=");        ONPLAY_K_LCD(sum_yy,3, 3);        LCD_WRITE_STR_POSS(4,0,"請按ok鍵繼續");        wait_ok();#endif        sum_x = sum(x, n);         sum_y = sum(y, n); #ifndef DEBUG_SIMULATOR        TXT_Clear();        LCD_WRITE_STR_POSS(1,0,"sum_x=");        ONPLAY_K_LCD(sum_x,1, 3);        LCD_WRITE_STR_POSS(2,0,"sum_y=");        ONPLAY_K_LCD(sum_y,2, 3);        LCD_WRITE_STR_POSS(4,0,"請按ok鍵繼續");        wait_ok();#endif
        xavg = average(x, n);         yavg = average(y, n);         ONPLAY_K_LCD(xavg,1, 3);#ifndef DEBUG_SIMULATOR        TXT_Clear();        LCD_WRITE_STR_POSS(1,0,"xavg=");        ONPLAY_K_LCD(xavg,1, 3);        LCD_WRITE_STR_POSS(2,0,"yavg=");        ONPLAY_K_LCD(yavg,2, 3);        LCD_WRITE_STR_POSS(4,0,"請按ok鍵繼續");        wait_ok();#endif
        LXY = 0.0;         LXX = 0.0;         for(i = 0; i < n; i ++)         {         LXY += (x[i] - xavg) * (y[i] - yavg); //LXY        LXX += (x[i] - xavg) * (x[i] - xavg); //LXX        } #ifndef DEBUG_SIMULATOR        TXT_Clear();        LCD_WRITE_STR_POSS(1,0,"LXY=");        ONPLAY_K_LCD(LXY,1, 2);        LCD_WRITE_STR_POSS(2,0,"LXX=");        ONPLAY_K_LCD(LXX,2, 2);        LCD_WRITE_STR_POSS(4,0,"請按ok鍵繼續");        wait_ok();#endif
        a = LXY / LXX; //LXY/LXX        b = yavg - a * xavg; //AVG_Y-B*AVG_X
        tem1=(((float)n*sum_xy)-((float)sum_x*sum_y))/100;        tem2=(((float)n*sum_xx)-(sum_x*sum_x))*((float)n*sum_yy-((sum_y*sum_y)/10000));        r_line =(float)(tem1/sqrtf(tem2));
        tem1=sum_xx-(sum_x*sum_x/(float)n);        s_line =(float)(sqrtf((float)(tem1/(float)(n-1))));//s_line =(float)(sqrtf((float)(tem1/(float)(n-1))));#ifndef DEBUG_SIMULATOR        TXT_Clear();        LCD_WRITE_STR_POSS(1,0,"s=");        ONPLAY_K_LCD(s_line,1, 1);
        LCD_WRITE_STR_POSS(2,0,"y=        x+");        LCD_WRITE_STR_POSS(4,0,"r=");        ONPLAY_r_LCD(r_line,4,1);
        ONPLAY_K_LCD(a,2, 1);        ONPLAY_K_LCD(b,3, 1);        LCD_WRITE_STR_POSS(1,7,"按");        LCD_WRITE_STR_POSS(2,7,"ok");        LCD_WRITE_STR_POSS(3,7,"繼");        LCD_WRITE_STR_POSS(4,7,"續");        wait_ok();#endif        k=a;        return k;} void line_polyfit_test(void){float X_DATA[10]={0.023,0.058,0.075,0.109,0.142,0.163,0.225,0.288};float Y_DATA[10]={100,200,300,400,500,600,800,1000};float S_line=0.0;float R_line=0.0;float K_line=0.0;float B_line=0.0;        linearregression(X_DATA,Y_DATA,8,K_line,B_line,R_line,S_line);        }#endif


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

使用道具 舉報

沙發
ID:103094 發表于 2016-1-25 20:03 | 只看該作者
還不錯
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 婷婷在线视频 | 中文字幕日韩欧美一区二区三区 | 亚洲手机在线 | 福利网站在线观看 | 18性欧美 | 91精品久久久久久久久中文字幕 | 中文字幕在线视频网站 | 成人激情视频在线观看 | 久久中文字幕视频 | 国产一级在线 | 天天摸天天干 | 在线国产一区二区 | 天天操操操操操 | 国产亚洲网站 | 国久久| 中文字字幕一区二区三区四区五区 | 国产中的精品av涩差av | 精品在线一区二区三区 | 老头搡老女人毛片视频在线看 | 亚洲成人av在线播放 | www.国产91 | 91素人 | 亚洲国产成人久久综合一区,久久久国产99 | 欧美性视频在线播放 | 97精品国产97久久久久久免费 | 九九热在线视频免费观看 | 亚洲一区二区三区免费在线观看 | 三级在线免费观看 | 欧美一区二区三区大片 | 亚洲精品在线视频 | 成人精品鲁一区一区二区 | 久久99精品久久久久久国产越南 | 国产中文 | 精品久久久久久久久久久久久久 | 亚洲欧美一区二区在线观看 | 一级片毛片 | 日韩精品久久一区二区三区 | 91超碰在线 | 福利视频一区二区 | 午夜久久久久久久久久一区二区 | 国产精品国产a级 |