12864实用各种串并类型
注释非常详细单片机驱动的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)
|