12864實用各種串并類型
0.png (38.57 KB, 下載次數: 41)
下載附件
2018-8-25 01:25 上傳
注釋非常詳細單片機驅動的12864源程序如下:
- #include<reg52.h>
- #include<12864.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar dis[110];
- uchar a;
- void delay1ms(uint xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--) /*或for(i=xms;i<0;i++)*/
- for(j=110;j>0;j--); /*for(j=110;j<0;j++); 總循環數=xms*110*/
- }
- void uart_int(void)
- {
- SCON=0x50; // SCON=0x50是SM1=1和REN=1,設置串口方式1且允許串口接收。
- //一般配合TMOD=0x20作串口中斷程序初始化。
- PCON=0x00; // 是設置波特率不加倍(0x80加倍)
- TMOD=0x20; // 是設置波特率發生器為定時器2為8位自動重裝載模式
- TH1 =0xFD;
- TL1 =0xFD; /*SMOD是特殊功能寄存器PCON的第7位,可以控制波特率的,SMOD=1時串口通訊的波特率倍增, 為0時波特率不倍增。
- SMOD=0時:參數=256-fsoc/12/32/波特率; SMOD=1時:參數=256-fsoc/12/16/波特率:
- 12M晶振或11.0592M晶振的情況下,當SMOD=0時,9600波特率的參數是0xfd,當SMOD=1時,9600波特率的參數是0xfa。
- 一個機器周期=12個時鐘周期
- 系統時鐘進入串行波特率發生模塊后,會進行32分頻 ,
- 如果你通過寄存器設置波特率倍增的話,這個32分頻就會改為16分頻。
- 分頻:主要是為了在內核頻率與串口波特率之間找一個平衡,同時傳統51也要設法降低時鐘樹上外設部分的工作頻率、才能控制住功耗。*/
- TR1 =1; // 是開啟定時器1
- EA=1; // 是開啟總中斷。
- ES=1; //是開啟串口中斷;
- }
- void display(unsigned char *p)//顯示
- {
- while(*p!='\0') /*'\0'是空格,一般是字符串的結束標志,指針變量不等于‘/0’不會跳出循環*/
- {
- write_dat(*p++); /*調用函數:寫顯示數據到LCD,將數組中的所有字符一個個地顯示在液晶屏幕上*/
- delay1ms(1);
- }
- }
-
-
- void serve() interrupt 4
- {
- dis[a++]=SBUF; /*單片機自動將串行數據接收緩沖器中的數據取走給table[n]*/
- RI=0; /*RI字面是接收中斷的意思,是串口接收中斷標志,當RI=1時表示串口接收完成,
- SBUF中保存好了接收的數據,此時申請中斷,如果ES=1,就進入中斷服務程序了。*/
- }
- void main()
- {
- uart_int(); /*調用中斷初始化函數*/
- lcd_init(); /*調用leo初始化函數*/
- while(1)
- {
- write_cmd(0x98);
- write_cmd(0x90); /*寫指令到第二行地址:串行數據顯示的位置*/
- write_cmd(0x88);
- write_cmd(0x80);
- display(dis); /*調用dispiay函數:將table的數組中輸入的所有字符一個個地顯示在液晶屏幕上*/
- }
- }
復制代碼
所有資料51hei提供下載:
12864液晶各種實現類型.zip
(147.25 KB, 下載次數: 339)
2018-8-24 16:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|