注释非常详细单片机驱动的12864源程序如下:
#include #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!='