|
仿真及程序下載:
1602LCD PROTUS仿真.zip
(39.42 KB, 下載次數: 113)
2016-9-25 13:38 上傳
點擊文件名下載附件
源程序:
- /*************************************************************************
- 程序功能:在LCD上顯示2017年08月21日
- I Love Mcu
- Author
- x x x
- ******************頭文件聲明**********************************************/
- #include <reg51.h>
- #include <intrins.h>
- /*********************************端口定義**********************************/
- sbit rs= P2^4;
- sbit rw = P2^5;
- sbit en = P2^6;
- sbit busy=P0^7;
- /********************************顯示數據表*********************************/
- unsigned char day[] = {0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; //日的字符表
- unsigned char month[]={0x1f,0x11,0x1d,0x11,0x1d,0x11,0x11,0x00}; //月的字符表 //月的字符表
- unsigned char year[] ={0x40,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02}; //年的字符表
- unsigned char time[] ={"20130821"};
- unsigned char code1[]={"I Love Mcu"};
- unsigned char author[]={"Author"};
- unsigned char name[]={"X X X"};
- /*****************************************************************************
- 函數功能:LCD延時子程序
- 入口參數:ms
- 出口參數:
- *****************************************************************************/
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- void DelayMs(unsigned char t)
- {
-
- while(t--)
- {
- //大致延時1mS
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
- /*****************************************************************************
- 函數功能:測試LCD忙碌狀態
- 入口參數:
- 出口參數:busy_flag
- *****************************************************************************/
- bit lcd_check_busy()
- {
- P0=0Xff;
- rs = 0;
- rw = 1;
- en = 0;
- _nop_();
- en=1;
- return busy;
- }
- /*****************************************************************************
- 函數功能:寫指令數據到LCD子程序
- 入口參數:cmd
- 出口參數:
- *****************************************************************************/
- void lcd_wcmd(unsigned char cmd)
- {
- while(lcd_check_busy()); //判斷LCD是否忙碌
- rs = 0;
- rw = 0;
- en = 1;
- P0 = cmd;
- _nop_();
- en = 0;
- }
- /*****************************************************************************
- 函數功能:設定顯示位置子程序
- 入口參數:pos
- 出口參數:
- *****************************************************************************/
- void lcd_pos(unsigned char pos)
- {
- lcd_wcmd(pos | 0x80);
- }
- /*****************************************************************************
- 函數功能:寫入顯示數據到LCD子程序
- 入口參數:dat
- 出口參數:
- *****************************************************************************/
- void lcd_wdat(unsigned char dat)
- {
- while(lcd_check_busy()); //判斷LCD是否忙碌
- rs = 1;
- rw = 0;
- en = 1;
- P0 = dat;
- _nop_();
- en = 0;
- }
- /*****************************************************************************
- 函數功能:LCD初始化子程序
- 入口參數:
- 出口參數:
- *****************************************************************************/
- void lcd_init()
- {
- lcd_wcmd(0x38);
- DelayMs(5);
- lcd_wcmd(0x38);
- DelayMs(5);
- lcd_wcmd(0x38);
- DelayMs(5);
- lcd_wcmd(0x38); //8位數據,雙行顯示,5*7點陣
- lcd_wcmd(0x08); //顯示關閉,無光標,光標不顯示
- lcd_wcmd(0x01); //清顯示
- lcd_wcmd(0x06); //光標右移
- DelayMs(5);
- lcd_wcmd(0x0c); //開顯示,有光標,光標閃爍
- }
- /****************************************************************************
- 函數功能:建立年月日字符
- 入口參數:
- 出口參數:
- *****************************************************************************/
- void lcd_setups()
- {unsigned int i;
- lcd_wcmd(0x40);
- for(i=0;i<8;i++)
- {lcd_wdat(year[i]);
- }
- lcd_wcmd(0x48);
- for(i=0;i<8;i++)
- {lcd_wdat(month[i]);
- }
- lcd_wcmd(0x50);
- for(i=0;i<8;i++)
- {lcd_wdat(day[i]);
- }
- }
- /*****************************************************************************
- 函數功能:主程序
- 入口參數:
- 出口參數:
- *****************************************************************************/
- void main(void)
- {unsigned char j;
- unsigned char i;
- lcd_init(); //初始化LCD
- lcd_setups(); //建立字符
- while(1)
- {for(j=0;j<5;j++)
- {
- lcd_pos(0x00); //顯示2013
- for(i=0;i<4;i++)
- {
- lcd_wdat(time[i]);
- }
- lcd_pos(0x05); //顯示年
- lcd_wdat(0x00);
- lcd_pos(0x07);
- for(i=4;i<6;i++) //顯示08
- {
- lcd_wdat(time[i]);
- }
- lcd_pos(0x0a); //顯示月
- lcd_wdat(0x01);
- lcd_pos(0x0c);
- for(i=6;i<8;i++) //顯示21
- {
- lcd_wdat(time[i]);
- }
- lcd_pos(0x0f); //顯示日
- lcd_wdat(0x02);
- lcd_pos(0x43); //顯示I Love Mcu
- for(i=0;i<10;i++)
- {DelayMs(500);
- lcd_wdat(code1[i]);
- }
- for(i=0;i<17;i++)
- {
- DelayMs(500);
- lcd_wcmd(0x18);
- }
- lcd_wcmd(0x01); //顯示字符整體左移1位
- }
- lcd_pos(0x05);
- for(i=0;i<6;i++)
- {
- DelayMs(500);
- lcd_wdat(author[i]);
- }
- lcd_pos(0x41);
- for(i=0;i<13;i++)
- {
- DelayMs(500);
- lcd_wdat(name[i]);
- }
- DelayMs(1000);
- lcd_wcmd(0x01);
- }
- }
復制代碼
|
評分
-
查看全部評分
|