|
仿真及程序下载:
1602LCD PROTUS仿真.zip
(39.42 KB, 下载次数: 113)
源程序:
- /*************************************************************************
- 程序功能:在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);
- }
- }
复制代码
|
评分
-
查看全部评分
|