|
今天,程序猿小馬突發(fā)奇想,以我們作為電子人的獨特方式預祝大家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 ;發(fā)送數據
- 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;//發(fā)送數據
- rw=0;
- e=0;
- delay(10);
- e=1;
- }
- }
- /***************************************************************************/
- void write2()
- {
- uchar i;
- for(i=0;i<16;i++)
- {
- P0=tab2[i];
- rs=1;//發(fā)送數據
- 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){}注釋掉,可使其顯示具有流水燈的效果。 |
|