#include "reg52.h" sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^2; sbit key=P2^3; unsigned int TR = 1; unsigned char i,j; void init(void); void write(unsigned char dat); void com(unsigned char co); void delay(unsigned char i); unsigned char line1[]="The second is:"; void main() { init (); TMOD=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; EX0=1; IT0=1; com(0x80); for(i=0;i<14;i++) { write(line1[i]); } while(1) { com(0x80|0x40); write(j/100+'0'); write(j/10%10+'0'); write(j%100+'0'); } } void T0_second() interrupt 1 { unsigned char count; TH0=(65536-1000)/256; TL0=(65536-1000)%256; count++; if(count == 1000) { j++; count = 0; } } void INT0_second() interrupt 0 { static unsigned char key_count=0; if(key == 0) { delay(5); if(key == 0) { while( key == 0 ); key_count++; if(key_count == 1) { TR=1; } else if(key_count == 2) { TR=0; } else if(key_count == 3) { j=0; key_count=0; TR=1; } } } } void delay(unsigned char n) { unsigned char i,j; for(i=n;i>0;i--) { for(j=110;j>0;j--); } } void write(unsigned char dat) { RS = 1; RW = 0; EN = 1; P0 = dat; delay(1); EN = 0; } void com(unsigned char cmd) { RS = 0; RW = 0; EN = 0; P0 = cmd ; delay(5); EN = 1; delay(5); EN=0; } void init(void) { com(0x38); com(0x0c); com(0x06); com(0x01); }
时间: 2023-10-23 17:12:52 浏览: 75
单片机中用c编程时头文件reg51.h及reg52.h解析
这段代码是一个基于8051单片机的LCD显示程序。它使用了reg52.h文件来定义和操作单片机的寄存器。sbit关键字用于定义单片机端口的引脚。
该程序的主要功能是在LCD上显示一个计时器的值,并通过外部中断0来控制计时器的启停和复位。具体的流程如下:
1. 初始化LCD和定时器0。
2. 设置定时器0的计数初值和工作模式。
3. 启用定时器0中断和外部中断0。
4. 在LCD上显示字符串"The second is:"。
5. 进入主循环,不断更新LCD上的计时器值。
定时器0中断函数T0_second()会在定时器0溢出时触发,每1000个溢出会增加j的值,相当于每隔1秒j加1。
外部中断0中断函数INT0_second()用于处理外部中断0触发的事件。当按下按键P2^3时,根据按键的次数执行不同的操作:按下一次启动计时器,再次按下停止计时器,第三次按下复位计时器。
其他函数包括delay()用于延时、write()用于向LCD写数据、com()用于向LCD发送命令、init()用于初始化LCD。
如果你有具体的问题或需要进一步解释,请告诉我。
阅读全文