|
IO直接驅(qū)動LCD
單片機(jī)源程序如下:
- #include <intrins.h>
- #include "config.h"
- #include "timer.h"
- #include "LCD_IO16.h"
- /************* 功能說明 **************
- 用STC115系列測試IO直接驅(qū)動段碼LCD(6個8字LCD, 1/4 Dutys, 1/3 bias)。
- 上電后顯示一個時間(時分秒).
- P3.2對地接一個開關(guān),用來進(jìn)入睡眠或喚醒.
- ******************************************/
- /************* 本地常量聲明 **************/
- /************* 本地變量聲明 **************/
- u8 cnt_500ms;
- u8 second,minute,hour;
- bit B_Second; //秒信號
- /************* 本地函數(shù)聲明 **************/
- /************* 外部函數(shù)和變量聲明 *****************/
- extern bit B_2ms;
- /************************ 定時器配置 ****************************/
- void Timer_config(void)
- {
- TIM_InitTypeDef TIM_InitStructure; //結(jié)構(gòu)定義
- TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
- TIM_InitStructure.TIM_Polity = PolityLow; //指定中斷優(yōu)先級, PolityHigh,PolityLow
- TIM_InitStructure.TIM_Interrupt = ENABLE; //中斷是否允許, ENABLE或DISABLE
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //指定時鐘源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; //是否輸出高速脈沖, ENABLE或DISABLE
- TIM_InitStructure.TIM_Value = 65536 - (MAIN_Fosc / 500); //初值, 節(jié)拍為500HZ
- TIM_InitStructure.TIM_Run = ENABLE; //是否初始化后啟動定時器, ENABLE或DISABLE
- Timer_Inilize(Timer0,&TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2
- }
- /******************** 顯示時間 **************************/
- void LoadRTC(void)
- {
- LCD_load(1,hour/10);
- LCD_load(2,hour%10);
- LCD_load(3,minute/10);
- LCD_load(4,minute%10);
- LCD_load(5,second/10);
- LCD_load(6,second%10);
- }
- //========================================================================
- // 函數(shù): void delay_ms(unsigned char ms)
- // 描述: 延時函數(shù)。
- // 參數(shù): ms,要延時的ms數(shù), 這里只支持1~255ms. 自動適應(yīng)主時鐘.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2013-4-1
- // 備注:
- //========================================================================
- void delay_ms(u8 ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc / 13000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /******************** 主函數(shù)**************************/
- void main(void)
- {
- Init_LCD_Buffer();
- Timer_config();
- EA = 1;
- LCD_SET_2M; //顯示時分間隔:
- LCD_SET_4M; //顯示分秒間隔:
- LoadRTC(); //顯示時間
-
- while (1)
- {
- PCON |= 0x01; //為了省電, 進(jìn)入空閑模式(電流大約2.5~3.0mA @5V),由Timer0 2ms喚醒退出
- _nop_();
- _nop_();
- _nop_();
- if(B_2ms) //2ms節(jié)拍到
- {
- B_2ms = 0;
- if(++cnt_500ms >= 250) //500ms到
- {
- cnt_500ms = 0;
- // LCD_FLASH_2M; //閃爍時分間隔:
- // LCD_FLASH_4M; //閃爍分秒間隔:
-
- B_Second = ~B_Second;
- if(B_Second)
- {
- if(++second >= 60) //1分鐘到
- {
- second = 0;
- if(++minute >= 60) //1小時到
- {
- minute = 0;
- if(++hour >= 24) hour = 0; //24小時到
- }
- }
- LoadRTC(); //顯示時間
- }
- }
-
- if(!P32) //鍵按下,準(zhǔn)備睡眠
- {
- LCD_CLR_2M; //顯示時分間隔:
- LCD_CLR_4M; //顯示分秒間隔:
- LCD_load(1,DIS_BLACK);
- LCD_load(2,DIS_BLACK);
- LCD_load(3,0);
- LCD_load(4,0x0F);
- LCD_load(5,0x0F);
- LCD_load(6,DIS_BLACK);
-
- while(!P32) delay_ms(10); //等待釋放按鍵
- delay_ms(50);
- while(!P32) delay_ms(10); //再次等待釋放按鍵
-
- TR0 = 0; //關(guān)閉定時器
- IE0 = 0; //外中斷0標(biāo)志位
- EX0 = 1; //INT0 Enable
- IT0 = 1; //INT0 下降沿中斷
- P1n_push_pull(0xff); //com和seg全部輸出0
- P2n_push_pull(0xff); //com和seg全部輸出0
- P1 = 0;
- P2 = 0;
- PCON |= 0x02; //Sleep
- _nop_();
- _nop_();
- _nop_();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
40-IO-LCD-8x6-2014-6-19.rar
(1.72 MB, 下載次數(shù): 54)
2018-9-5 15:11 上傳
點(diǎn)擊文件名下載附件
io控制lcd
|
|