|
今天,程序猿小马突发奇想,以我们作为电子人的独特方式预祝大家2015新春快乐!以下的这些程序可都是本人自己编写调试的哟!怎么样?这样的新春祝福够不够任性!
小灰KT工作室

附源程序:
(1)汇编语言(基本显示功能版 ):
- ;;-----------------------------------------------------------------
- ;; File:
- ;; Happy Spring Festival.asm
- ;; Brief:
- ;; The following information is displayed on LCD:
- ;; Happy Spring Festival!
- ;; Author:
- ;; Ma Yuhui
- ;; Date:
- ;; 2015/02/12
- ;;------------------------------------------------------------------
- RS BIT P2.0
- RW BIT P2.1
- E BIT P2.2
- DOUT EQU P0
- ORG 0000H ;MCS-51复位入口
- MAIN: MOV SP,#5FH ;初始化设置堆栈
- ACALL LCD_INIT ;LCD初始化程序
- MOV DOUT,#80H
- ACALL READY
- MOV DPTR,#TAB1
- ACALL WRITE
- MOV DOUT,#0C0H
- ACALL READY
- MOV DPTR,#TAB2
- ACALL WRITE
- SJMP $
- WRITE: MOV A,#00H
- MOVC A,@A+DPTR
- CJNE A,#0FFH,S1
- AJMP EXIT
- S1: MOV DOUT,A
- ACALL S2
- INC DPTR
- AJMP WRITE
- EXIT: RET
- S2: SETB RS ;发送数据
- CLR RW
- CLR E
- ACALL DELAY
- SETB E
- RET
- LCD_INIT: MOV DOUT,#38H ;设置16*2显示,5*7点阵,8位数据接口
- ACALL READY
- MOV DOUT,#01H ;清屏,显示清零,数据指针清零
- ACALL READY
- MOV DOUT,#06H ;设置输入模式,写入一个字符后,地址指针加1,光标加1
- ACALL READY
- MOV DOUT,#0CH ;设置显示开关控制,开显示,不显示光标
- ACALL READY
- RET
- READY: CLR RS ;写LCD命令
- CLR RW
- CLR E
- ACALL DELAY
- SETB E
- RET
- DELAY: MOV DOUT,#0FFH
- CLR RS
- SETB RW
- CLR E
- NOP
- NOP
- SETB E
- JB DOUT.7,DELAY
- RET
- TAB1: DB 20H,20H,20H,20H,20H,48H,61H,70H,70H,79H ;Happy
- DB 20H,20H,20H,20H,20H,20H,0FFH
- TAB2: DB 53H,70H,72H,69H,6EH,67H,20H,46H,65H,73H ;Spring Festival
- DB 74H,69H,76H,61H,6CH,21H,0FFH
- END
- ;;end of Happy Spring Festival.asm
复制代码
(2)C语言(升级版):
- /***************************************************************************/
- /* File:
- Happy Spring Festival.c
- Brief:
- The following information is displayed on LCD:
- Happy Spring Festival!
- Author:
- Ma Yuhui
- Date:
- 2015/02/12
- */
- /***************************************************************************/
- #include "reg51.h"
- #define unit unsigned int
- #define uchar unsigned char
- sbit rs=P2^0;
- sbit rw=P2^1;
- sbit e=P2^2;
- const tab1[]={0x20,0x20,0x20,0x20,0x20,0x48,0x61,0x70,0x70,0x79,0x20,0x20,0x20,0x20,0x20,0x20,};//Happy
- const tab2[]={0x53,0x70,0x72,0x69,0x6e,0x67,0x20,0x46,0x65,0x73,0x74,0x69,0x76,0x61,0x6c,0x21,};//Spring Festival!
- /***************************************************************************/
- void delay(unit t)
- {
- unit i;
- while(t--)
- for(i=0;i<120;i++);
- }
- /***************************************************************************/
- void write1()
- {
- uchar i;
- for(i=0;i<16;i++)
- {
- P0=tab1[i];
- rs=1;//发送数据
- rw=0;
- e=0;
- delay(10);
- e=1;
- }
- }
- /***************************************************************************/
- void write2()
- {
- uchar i;
- for(i=0;i<16;i++)
- {
- P0=tab2[i];
- rs=1;//发送数据
- rw=0;
- e=0;
- delay(10);
- e=1;
- }
- }
- /***************************************************************************/
- void ready()
- {
- rs=0;//写LCD命令
- rw=0;
- e=0;
- delay(10);
- e=1;
- }
- /***************************************************************************/
- void lcd_init()
- {
- P0=0x38;//设置16*2显示,5*7点阵,8位数据接口
- ready();
- P0=0x01;//清屏,显示清零,数据指针清零
- ready();
- P0=0x06;//设置输入模式,写入一个字符后,地址指针加1,光标加1
- ready();
- P0=0x0c;//设置显示开关控制,开显示,不显示光标
- ready();
- }
- /***************************************************************************/
- void main()
- {
- lcd_init();//LCD初始化程序
- while(1)
- {
- P0=0x80;
- ready();
- write1();
- P0=0xc0;
- ready();
- write2();
- }
- }
- /*end of Happy Spring Festival.c*/
复制代码
注:C语言(升级版)中字符的显示具有打字机的效果。若将其中的 while(1){}注释掉,可使其显示具有流水灯的效果。 |
|