金牌会员
- 积分
- 1824
- 金钱
- 1824
- 注册时间
- 2013-4-13
- 在线时间
- 63 小时
|
只知道向1602写字符和字符串以及数字,但是不会写动态显示数字程序。冥思苦想结合以前数码管秒表原理,终于拼凑出了6位动态显示秒表,但是经过检验发现数字一计到300就归零了,还函数是否可以封装一下?时间精度怎么样?请高人指点!
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 x=0;
sbit RS = P1^0 ;
sbit RW = P1^1 ;
sbit EN = P1^5 ;
sbit BUSY = P0^7;
uint16 counter=0;
uint8 code word2[]={"wangyan_N0.1!"};
timer0_int()
{ TMOD=0X01;
TH0=0XFC;
TL0=0X67;
TR0=1;
ET0=1;
EA=1;
}
wait()
{P0=0xff;
do{EN=0;RS=0;RW=1;EN=1;}while(BUSY==1);
EN=0;
}
w_dat(uint8 dat)
{wait();
EN=0;
 0=dat;
RW=0;
RS=1;
EN=1;
EN=0;
}
w_cmd(uint8 add)
{ wait();
EN=0;
P0=add;
RW=0;
RS=0;
EN=1;
EN=0;
}
w_string(uint8 add,uint8 *p)
{ w_cmd(add);
while(*p!='\0')
w_dat(*p++);
}
Init_LCD1602(void)
{
w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移。此处只能是0x06!
w_cmd(0x01); // 清屏
}
main()
{ Init_LCD1602();
timer0_int();
w_string(0x80,word2);
while(1);
}
timer0_interrupt() interrupt 1
{ uint8 d0,d1,d2,d3,d4,d5;
TF0=0;
TH0=0XFC;
TL0=0X67;
TR0=1;
counter++;
if(counter==1000)
{ counter=0;
x++ ;
d0=x%10;
d1=x/10%10;
d2=x/100%10;
d3=x/1000%10;
d4=x/10000%10;
d5=x/100000%10;
w_cmd(0xc5);
w_dat(d0+'0');
w_cmd(0xc4);
w_dat(d1+'0');
w_cmd(0xc3);
w_dat(d2+'0');
w_cmd(0xc2);
w_dat(d3+'0');
w_cmd(0xc1);
w_dat(d4+'0');
w_cmd(0xc0);
w_dat(d5+'0');
}
}
|
|