东北石油大学本科生毕业设计(论文)
}}
display_time(2); for(i=0;i<32;i++) date[i]=da[i]; display_time(2); date[i]=xie[i]; display_time(2); displaymove(dong,6,11); display_time(1); displaymovetb(1,0,11); //display_time(1);
displaymovetb(0,dong,11); displaymovetb(0,bei,11); displaymovetb(0,shi,11); displaymovetb(0,you,11); displaymovetb(0,da,11); displaymovetb(0,xie,11); displaymovetb(0,0,11); display_time(1); displaymovetb(1,dong,11); displaymovetb(1,bei,11); displaymovetb(1,shi,11); displaymovetb(1,you,11); displaymovetb(1,da,11); displaymovetb(1,xie,11); display_time(1);
for(i=0;i<32;i++)
5.2 显示驱动程序
图5-2为显示驱动程序(显示屏扫描函数)流程图。根据流程图可以编写出相应的显示程序。显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷新率(帧频)=
fosc11×T0溢出率=? 161612?65536?t0?其中fosc为晶振频率,t0为定时器T0初值(工作在16位定时器模式)。
22
东北石油大学本科生毕业设计(论文)
T0初值=2-
N定时时间
机周时间其中N与工作方式有关,本设计定时/计数器工作于方式1,如图4-3所示,方式1构成一个16位定时计数器,即N=16。
方式1最大计数值为216=65536 ,若fosc=12MHz,则定时时间范围为1~65536μs。
机周时间与主振频率有关,机器周期是时钟周期的12倍,因此,机周时间=12/ fosc。当fosc=12MHz时,1机周=1μs。
退出中断 送新行号、打开显示 切换显示数据 消 隐 送新行显示数据 读取行号并增1 定时器初值11111 进入中断
图5-2 显示驱动程序流程图
图5-3 定时/计数器T0工作方式1逻辑电路结构图
23
东北石油大学本科生毕业设计(论文)
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。
程序如下: void display() {
unsigned char i,ia,j,tmp; DATE_OUT=0XFF; AB=0;
for(i=0;i<16;i++) {SCK=0; SCLT=0; for(ia=2;ia>0;) {ia--;
tmp=~date[i*2+ia]; for(j=0;j<8;j++) { SCLH=0;
DATA=tmp&0x01; tmp>>=1; SCLH=1; } }
DATE_OUT|=0X14; AB=1; } j=64; while(j--); SCK=0; SCK=1;}
5.3 本章小结
为了实现将汉字横向移出和静止的功能,将程序分成了多个模块,对显示的驱动程序进行了设计。
24
东北石油大学本科生毕业设计(论文)
25
相关推荐: