|
求大佬給段代碼參考一下,或者給個思路,實在是想不出來了。
- #ifndef _LCD_12864
- #define _LCD_12864
- /*****************************預定義**************************************/
- #define uchar unsigned char
- #define uint unsigned int/***************************12864管腳配置****************************/
- #define port P2
- sbit rs=P3^0;
- sbit rw=P3^1;
- sbit e=P3^2;
- sbit cs1=P3^3;
- sbit cs2=P3^4;
- /********************************************************************************************
- * 函數名稱:Delay()
- * 功 能:延遲時間=a*1ms
- * 入口參數:
- * 出口參數:無
- *********************************************************************************************/
- void Delay(uint a)
- {
- uchar i;
- while(a--)
- for(i=0;i<125;i++);
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Display_On()
- * 功 能:LCD顯示開
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Display_On()
- {
- port=0x3f;
- rs=0;
- rw=0;
- e=1;
- e=0;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Display_Off()
- * 功 能:LCD顯示關
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Display_Off()
- {
- port=0x3e;
- rs=0;
- rw=0;
- e=1;
- e=0;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Set_X(uchar x)
- * 功 能:LCD設置X坐標
- * 入口參數:x
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Set_X(uchar x)
- {
- port=0xb8|x;
- rs=0;
- rw=0;
- e=1;
- e=0;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Set_Y(uchar y)
- * 功 能:LCD設置Y坐標
- * 入口參數:y
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Set_Y(uchar y)
- {
- port=0x40|y;
- rs=0;
- rw=0;
- e=1;
- e=0;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Set_X_Y(uchar x, uchar y )
- * 功 能:LCD設置x y坐標
- * 入口參數:x y
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Set_X_Y(uchar x, uchar y)
- {
-
- if( y<64 )
- { cs1=1; cs2=0; Lcd_Set_Y( y ); }
- else
- { cs1=0; cs2=1; Lcd_Set_Y( y-64 ); }
- Lcd_Set_X( x);
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Write_Command()
- * 功 能:寫指令代碼
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- /*void Lcd_pos(uchar x,uchar y)
- {
- uchar pos;
- switch(x)
- {
- case 0:x=0x80;break;
- case 1:x=0x90;break;
- case 2:x=0x88;break;
- case 3:x=0x98;break;
- default:break;
- }
- pos=x+y;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Write_Command()
- * 功 能:寫指令代碼
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Write_Command(uchar temp)
- {
- port=temp;
- rs=0;
- rw=0;
- e=1;
- e=0;
- }
- /********************************************************************************************
- * 函數名稱:Lcd_Write_Byte()
- * 功 能:寫數據
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Write_Byte(uchar temp)
- {
- port=temp;
- rs=1;
- rw=0;
- e=1;
- e=0;
- }
- /****************************************************************************
- *名稱:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
- *功能:顯示16X8字符(字母)
- *入口參數:
- *出口參數:
- *說明:bit_flag = 1 正常顯示 bit_flag = 0 黑白反相顯示
- ****************************************************************************/
- void Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
- {
- uchar i , j,temp;
- temp=y;
- if( bit_flag )
- {
- for( i=0; i<2; i++ )
- {
- x+=i;
- y=temp;
- for( j=0;j<8;j++ )
- {
- Lcd_Set_X_Y( x, y ); y++;
- Lcd_Write_Byte( point[ i*8 + j] );
- }
- }
- }
- else
- {
- for( i = 0; i < 2; i++ )
- {
- x += i;
- y = temp;
- for( j = 0; j < 8; j++ )
- {
- Lcd_Set_X_Y( x, y ); y++;
- Lcd_Write_Byte( ~point[ i * 8 + j ] );
- }
- }
- }
- }
- /****************************************************************************
- * 名稱:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
- * 功能:顯示16*16字符(漢字)
- * 入口參數:x y data
- * 出口參數:無
- *說明:bit_flag = 1 正常顯示 bit_flag = 0 黑白反相顯示
- ****************************************************************************/
- void Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
- {
- uchar i,j,temp ;
- temp=y;
- if( bit_flag )
- {
- for( i=0; i<2; i++ )
- {
- x+=i;
- y=temp;
- for( j=0;j<16;j++ )
- {
- Lcd_Set_X_Y( x, y ); y++;
- Lcd_Write_Byte( point[ i*16 + j] );
- }
- }
- }
- else
- {
- for( i = 0; i<2; i++ )
- {
- x += i;
- y = temp;
- for( j = 0; j < 16; j++ )
- {
- Lcd_Set_X_Y( x, y ); y++;
- Lcd_Write_Byte( ~ point[ i * 16 + j ] );
- }
- }
- }
- }
- /****************************************************************************
- * 名稱:Lcd_Clear(void)
- * 功能:清屏
- * 入口參數:無
- * 出口參數:無
- ****************************************************************************/
- void Lcd_Clear()
- {
- uchar i,j;
- cs1=1;cs2=1;
- for(i=0;i<8;i++)
- {
- Lcd_Set_X( i );
- Lcd_Set_Y( 0 );
- for(j=0;j<64;j++)
- Lcd_Write_Byte(0x00);
- }
- }
- /*******************************************************************************************
- * 函數名稱:Lcd_Initial()
- * 功 能:初始化LCD
- * 入口參數:無
- * 出口參數:無
- *********************************************************************************************/
- void Lcd_Initial()
- {
- Lcd_Display_Off();
- Lcd_Write_Command(0xb8); //Page_Add
- Lcd_Write_Command(0x40); //Col_Add
- Lcd_Write_Command(0xc0); //Start_Line
- Lcd_Display_On();
- Lcd_Clear();
- }
- /****************************************************************************
- * 名稱:Lcd_Time(uchar * clock_time )
- * 功能:顯示時間
- * 入口參數:無
- * 出口參數:無
- * 說明 : 時間數組 BCD 碼形式
- ****************************************************************************/
- void Lcd_Time(uchar * clock_time )
- {
- uchar i=0;
- //顯示 "hour時min分sec秒"
- i= * clock_time >> 4;
- Lcd_Character_16X8( 1, 0, 80, letter_logo[i]); //顯示 sec的高位
- i= * clock_time & 0x0f;
- Lcd_Character_16X8( 1, 0, 88, letter_logo[i]); //顯示 sec的低位
- Lcd_Character_16X16( 1, 0, 96 , time_logo[2]); //顯示 秒
- clock_time ++;
- i= * clock_time >> 4;
- Lcd_Character_16X8( 1, 0, 48, letter_logo[i]); //顯示 min的高位
- i= * clock_time & 0x0f;
- Lcd_Character_16X8( 1, 0, 56, letter_logo[i]); //顯示 min的低位
- Lcd_Character_16X16( 1, 0, 64 , time_logo[1]); //顯示 分
- clock_time ++;
- i= * clock_time >> 4;
- Lcd_Character_16X8( 1, 0, 16 , letter_logo[i]); //顯示 hour的高位
- i= * clock_time & 0x0f;
- Lcd_Character_16X8( 1, 0, 24 , letter_logo[i]); //顯示 hour的低位
- Lcd_Character_16X16( 1, 0, 32 , time_logo[0]); //顯示 分
- }
- /****************************************************************************
- * 名稱:Lcd_Data(uchar * clock_time )
- * 功能:顯示日期
- * 入口參數:無
- * 出口參數:無
- * 說明 : 時間數組 BCD 碼形式
- ****************************************************************************/
- void Lcd_Week( uchar week )
- {
- Lcd_Character_16X16( 1, 6, 0, week_logo[7] ); //星
- Lcd_Character_16X16( 1, 6, 16, week_logo[8] ); //期
- Lcd_Character_16X16( 1, 6, 32, week_logo[ week & 0x0f ] );
- }
- /******************************************************************************
- * 函數名稱: Lcd_Clock( uchar *clock_time )
- * 功能: 顯示時鐘
- * 入口參數: 時鐘地址
- * 出口參數: 無
- ********************************************************************************/
- void Lcd_Clock( uchar * clock_time )
- {
- Lcd_Time( clock_time ); //顯示時間
- }
- /******************************************************************************
- * 函數名稱: Lcd_welcome()
- * 功能: 顯示歡迎語
- * 入口參數: 無
- * 出口參數: 無
- ********************************************************************************/
- void Lcd_welcome()
- {
- Lcd_Character_16X16( 1,2, 32, chushi_logo[0] );
- Lcd_Character_16X16( 1,2, 48, chushi_logo[1] );
- Lcd_Character_16X16( 1,2, 64, chushi_logo[2] );
- Lcd_Character_16X16( 1,2, 80, chushi_logo[3] );
- Lcd_Character_16X16( 1,5, 32, chushi_logo[4] );
- Lcd_Character_16X16( 1,5, 48, chushi_logo[5] );
- Lcd_Character_16X16( 1,5, 64, chushi_logo[6]);
- Lcd_Character_16X16( 1,5, 80, chushi_logo[7] );
- }
- /******************************************************************************
- * 函數名稱: Lcd_welcome()
- * 功能: 顯示歡迎語
- * 入口參數: 無
- * 出口參數: 無
- ********************************************************************************/
- void Lcd_dsgt()
- {
- Lcd_Character_16X8(1,2,0,letter_logo[1]);
- Lcd_Character_16X8(1,2,8,letter_logo[10]);
- Lcd_Character_16X8(1,2,16,letter_logo[5]);
- Lcd_Character_16X8(1,2,24,letter_logo[13]);
- Lcd_Character_16X8(1,2,32,letter_logo[2]);
- Lcd_Character_16X8(1,2,40,letter_logo[10]);
- Lcd_Character_16X8(1,2,48,letter_logo[6]);
- Lcd_Character_16X8(1,2,56,letter_logo[13]);
- Lcd_Character_16X8(1,2,64,letter_logo[3]);
- Lcd_Character_16X8(1,2,72,letter_logo[10]);
- Lcd_Character_16X8(1,2,80,letter_logo[7]);
- Lcd_Character_16X8(1,2,88,letter_logo[13]);
- Lcd_Character_16X8(1,2,96,letter_logo[4]);
- Lcd_Character_16X8(1,2,104,letter_logo[10]);
- Lcd_Character_16X8(1,2,112,letter_logo[8]);
- Lcd_Character_16X8(1,2,120,letter_logo[13]);
- }
- /******************************************************************************
- * 函數名稱: Lcd_welcome()
- * 功能: 顯示歡迎語
- * 入口參數: 無
- * 出口參數: 無
- ********************************************************************************/
- void Lcd_tim()
- {
-
- Lcd_Character_16X8(1,4,32,letter_logo[0]);
- Lcd_Character_16X8(1,4,40,letter_logo[0]);
- Lcd_Character_16X8(1,4,48,letter_logo[10]);
- Lcd_Character_16X8(1,4,56,letter_logo[0]);
- Lcd_Character_16X8(1,4,64,letter_logo[0]);
- Lcd_Character_16X8(1,4,72,letter_logo[10]);
- Lcd_Character_16X8(1,4,80,letter_logo[0]);
- Lcd_Character_16X8(1,4,88,letter_logo[0]);
- }
- /******************************************************************************
- * 函數名稱: Lcd_welcome()
- * 功能: 顯示歡迎語
- * 入口參數: 無
- * 出口參數: 無
- ********************************************************************************/
- void Lcd_Show()
- {
- Lcd_dsgt();
- Lcd_tim();
- }
- /*******************************************************************************
- * 名稱: Lcd_Temperature( uchar * temperture )
- * 功能: 顯示溫度
- * 入口參數: 溫度
- * 出口參數: 無
- *********************************************************************************/
- void Lcd_Temperture( uchar * temperature )
- {
- uchar temp;
-
- uchar sign=0; //定義符號標志位,revised by iam3i
- if(temperature[1]>127)
- {
- sign=1;
- temperature[0]=(~temperature[0]+1);
- if((temperature[0])>=0xff)
- temperature[1]=(~temperature[1])+1;
- else
- temperature[1]=~temperature[1];
- }
- else
- sign=0;
- switch( * temperature & 0x0f ) //查表 精確到 0.1 °C
- {
- case 0x00: temp = 0; break;
- case 0x01: temp = 1; break;
- case 0x02: temp = 1; break;
- case 0x03: temp = 2; break;
- case 0x04: temp = 2; break;
- case 0x05: temp = 3; break;
- case 0x06: temp = 4; break;
- case 0x07: temp = 4; break;
- case 0x08: temp = 5; break;
- case 0x09: temp = 6; break;
- case 0x0a: temp = 6; break;
- case 0x0b: temp = 7; break;
- case 0x0c: temp = 8; break;
- case 0x0d: temp = 8; break;
- case 0x0e: temp = 9; break;
- case 0x0f: temp = 9; break;
- default: break;
- }
-
- Lcd_Character_16X8( 1, 6, 56, letter_logo[12] );
- Lcd_Character_16X8( 1, 6, 64, letter_logo[10] );
- Lcd_Character_16X8( 1, 6, 120, temperture_logo[2] ); // C
- Lcd_Character_16X8( 1, 6, 112, temperture_logo[1] ); // °
- Lcd_Character_16X8( 1, 6, 104, letter_logo[temp] ); // 小數位
- Lcd_Character_16X8( 1, 6, 96, temperture_logo[0] ); // .
- temp = ( * temperature ) >> 4;
- temperature++;
- temp |= ( * temperature ) << 4;
- Lcd_Character_16X8( 1, 6, 88, letter_logo[temp% 10 ] ); //個位
- if (temp/10==0 )
- Lcd_Character_16X8(1,6,80,letter_logo[13]); //十位為0,不顯示
- else
- Lcd_Character_16X8( 1, 6, 80, letter_logo[temp/10 ] ); //十位,該程序不能正確顯示大于99.9度的溫度
-
- if(sign==1)
- Lcd_Character_16X8(1,6,72,letter_logo[11]);
- else
- Lcd_Character_16X8(1,6,72,letter_logo[13]);
-
- }
- /********************************************************************************
- * 名稱: void Week_convert( uchar * clock_time )
- * 功能: 輸入BCD陽歷數據;輸出BCD星期
- * 入口參數:
- * 出口參數:
- * 說明: 算法: ( 日期 + 年份 + 所過閏年 + 月校正 ) / 7 的余數就是星期 如果是閏年又不到 3 月份上述之和 要減一天 再
- ********************************************************************************/
- void Week_Convert( bit c, uchar * clock_time )
- {
- uchar year, month, day; //定義 年 月 天
- uchar temp;
- clock_time += 3; //指向日
- day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD轉換十進制
- clock_time ++; //指向月
- month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );
- clock_time ++; //指向年
- year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );
- if( c == 0 ) //如果為21世紀,年份數加100
- year += 100;
- temp = year / 4; //所過閏年數只算1900年之后的
- temp = year + temp;
- temp = temp % 0x07; //為節省資源,先進行一次取余,避免數大于0xff,避免使用整型數據
- temp = temp + day + table_week[ month - 1 ];
- if( ( year % 4 == 0 ) && ( month <3 ) )
- temp -=1;
- Lcd_Week( temp % 7 );
- }
- /********************************************************************************/
- #endif
復制代碼
上面的是LCD12864函數,怎么能在12864中把這段1602里的代碼實現?- void write_sfm(uint8_t add,uint8_t date) //時間寫入函數
- {
- uint8_t shiw,gew;
- shiw=date/10;
- gew=date%10;
- lcd_wcmd(0x80+0x40+add);
- lcd_wdat(0x30+shiw);
- lcd_wdat(0x30+gew);
- }
- void write_dsgt(uint8_t add,uint8_t date) //藥量寫入函數
- {
- lcd_wcmd(0x80+0x40+add);
- lcd_wdat(0x30+date);
- }
復制代碼- if(s3num==2)
- {
- shi++;
- if(shi==24)
- shi=0;
- write_sfm(8,shi);
- lcd_wcmd(0x80+0x40+8);
- }
- if(s3num==3)
- {
- dsg1++;
- if(dsg1==10)
- dsg1=0;
- write_dsgt(0,dsg1);
- lcd_wcmd(0x80+0x40+0);
- }
- if(s3num==4)
- {
- dsg2++;
- if(dsg2==10)
- dsg2=0;
- write_dsgt(2,dsg2);
- lcd_wcmd(0x80+0x40+2);
- }
- if(s3num==5)
- {
- dsg3++;
- if(dsg3==10)
- dsg3=0;
- write_dsgt(4,dsg3);
- lcd_wcmd(0x80+0x40+4);
- }
- if(s3num==6)
- {
- dsg4++;
- if(dsg4==10)
- dsg4=0;
- write_dsgt(6,dsg4);
- lcd_wcmd(0x80+0x40+6);
復制代碼 |
-
-
sheji.rar
2022-5-7 21:54 上傳
點擊文件名下載附件
42.98 KB, 下載次數: 9
1602程序
|