LCD显示的秒表单片机课程设计 联系客服

发布时间 : 星期四 文章LCD显示的秒表单片机课程设计更新完毕开始阅读6c1ca30f8f9951e79b89680203d8ce2f006665b9

芜湖职业技术学院 信息工程系

Time_Buffer[0]++; if(Time_Buffer[0]==100) {

Time_Buffer[0]=0; Time_Buffer[1]++; }

if(Time_Buffer[1]==60) //秒 {

Time_Buffer[1]=0; Time_Buffer[2]++; }

if(Time_Buffer[2]==60) //分 {

Time_Buffer[2]=0; Time_Buffer[3]++; }

if(Time_Buffer[3]==24) //时 Time_Buffer[3]=0;

}此函数为中断函数,interrupt 1 using 0为定时器T0工作于0号寄存器,TH0=-10000/256,TL0=-10000%6,用于计算定时器的初值,除得的放在高八位,余的的放在第八位。接下来的代码用于控制在1602LCD显示屏中秒表自动进位换算的的效果,(1小时=60分钟,1分钟=60秒,1秒=100毫秒)当小时到达24时,清零。 void main() {

25

芜湖职业技术学院 信息工程系

uchar i; IE=0x82; TMOD=0X01; TH0=-10000/256; TL0=-10000%6; LCD_Initialize();

Display_String(msg1,0x00); Display_String(msg2,0x40); While (1) {

if (K1==0) {

DelayX(100); i=++KeyCount; switch(i) { Case 1: Case 3: TR0=1;

Display_String(Promts[i-1],0); break; Case 2: Case 4: TR0=0;

26

芜湖职业技术学院 信息工程系

Display_String(Promts[i-1],0); break; default:TR0=0; break; }

while (K1==0); Beep(); } else if (K2==0) { TR0=0; KeyCount=0; for(i=0;i<4;i++) Time_Buffer[i]=0; Display_String(msg1,0); Beep(); DelayX(100);

While (K2==0); }

Show_Second(); }

27

芜湖职业技术学院 信息工程系

}

主函数,中断允许寄存器IE,IE=0x82=10000010表示EA为1,CPU开放中断;ET0=1,允许外部中断1中断。定时/计数器方式控制寄存器TMOD,TMOD=0x01=00000001,表示在T0方式字段中工作方式为方式1,是定时器方式,定时器的技术不受外部引脚输入电平的控制,而只受定时器运行控制位(TR0、TR1)的控制。进行高低8为赋初值。接着调用初始化LCD子函数,在其子函数中进行顺序执行,每个都先延时5毫秒,接着调用写指令函数。返回至主程序。接着调用显示函数,在

LCD

指定行上显示字符串,

Display_String(msg1,0x00),msg1为一个一维数组(Second Watch 0),即Display_String(Second Watch 0,0x00),在该子函数中调用设置显示位置子函数,在该子函数中调用写指令子函数 进行或操作: 00 80 80 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 与操作后得到结果为80,即LCD_Write_Command(0X80) ,调用该函数(即向LCD写指令函数)。LCD_Busy_Check()用于检测LCD是否处于忙状态,假如处于忙状态,RS为0(选择指令寄存器),RW为1(进行读操作),EN为1(寄存器使能)。Delay NOP()表示延时四个机器周期。Result=(bit)(P0&0X80),P0的初始状态是FF. 进行与操作:

28