分享到:
//==============================用户自定义区=====================================
#include<reg52.h> //基于E18d80NK的计数器案例
#define uint unsigned int
#define uchar unsigned char
uchar code table[]= "0000000000000000";
uchar code tablex[]= "0000000000000000";
sbit lcden=P2^7;
sbit lcdrs=P2^5;
sbit lcdrw=P2^6;
//uchar count;
uint num;//0~65536
//==============================函数声明区=====================================
void delay(uint xms)//延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)//位置显示函数
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)//数据
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()//lcd初始化
{
uchar nm;
lcden=0;
lcdrw=0;
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后地址加1
write_com(0x01);//显示清0,数据指针清零
write_com(0x80);
for(nm=0;nm<10;nm++)//第一行显示
{
write_data(table[nm]);
delay(5);
}
write_com(0x80+0x40);
for(nm=0;nm<10;nm++)//第一行显示
{
write_data(table[nm]);
delay(5);
}
}
void write_sfm(uchar add,uchar date)
{
write_com(0x80+0x40+add);
write_data(0x30+date);
write_com(0x80+add);
write_data(0x30+date);
}
void Timer0(void) interrupt 1
{
num++;
write_sfm(5,num%1);//个位
write_sfm(4,num%10);//个位
write_sfm(3,num%100/10);//十位
write_sfm(2,num%1000/100);//百位
write_sfm(1,num/10000/1000); //千位
write_sfm(0,num/10000); //万位
}
//========================主函数区===========================================
void main()
{
init();
//***定时器Timer0初始化***
TMOD&=0xF0; //将TMOD的低4位定时器0控制部分清零
TMOD|=0x01; //设置定时器0为方式1
TL0=0x47; //设置定时器0初值低8位
TH0=0xFF; //设置定时器0初值高8位
TR0=1; //启动定时器0
ET0=1; //Timer0中断允许
//**********************
//***开全局中断设置****
//定时器Timer0设置了中断允许,此处要开全局中断
//外部中断INT0设置了中断允许,此处要开全局中断
EA=1; //开全局中断
//*********************
while(1)
{
}
}
为什么我无论怎么修改定时器的值从10ms到100us,显示在1602上的数字,自加的速度都是不变的
#include<reg52.h> //基于E18d80NK的计数器案例
#define uint unsigned int
#define uchar unsigned char
uchar code table[]= "0000000000000000";
uchar code tablex[]= "0000000000000000";
sbit lcden=P2^7;
sbit lcdrs=P2^5;
sbit lcdrw=P2^6;
//uchar count;
uint num;//0~65536
//==============================函数声明区=====================================
void delay(uint xms)//延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)//位置显示函数
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)//数据
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()//lcd初始化
{
uchar nm;
lcden=0;
lcdrw=0;
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后地址加1
write_com(0x01);//显示清0,数据指针清零
write_com(0x80);
for(nm=0;nm<10;nm++)//第一行显示
{
write_data(table[nm]);
delay(5);
}
write_com(0x80+0x40);
for(nm=0;nm<10;nm++)//第一行显示
{
write_data(table[nm]);
delay(5);
}
}
void write_sfm(uchar add,uchar date)
{
write_com(0x80+0x40+add);
write_data(0x30+date);
write_com(0x80+add);
write_data(0x30+date);
}
void Timer0(void) interrupt 1
{
num++;
write_sfm(5,num%1);//个位
write_sfm(4,num%10);//个位
write_sfm(3,num%100/10);//十位
write_sfm(2,num%1000/100);//百位
write_sfm(1,num/10000/1000); //千位
write_sfm(0,num/10000); //万位
}
//========================主函数区===========================================
void main()
{
init();
//***定时器Timer0初始化***
TMOD&=0xF0; //将TMOD的低4位定时器0控制部分清零
TMOD|=0x01; //设置定时器0为方式1
TL0=0x47; //设置定时器0初值低8位
TH0=0xFF; //设置定时器0初值高8位
TR0=1; //启动定时器0
ET0=1; //Timer0中断允许
//**********************
//***开全局中断设置****
//定时器Timer0设置了中断允许,此处要开全局中断
//外部中断INT0设置了中断允许,此处要开全局中断
EA=1; //开全局中断
//*********************
while(1)
{
}
}
为什么我无论怎么修改定时器的值从10ms到100us,显示在1602上的数字,自加的速度都是不变的
(0 )
(0 )


-
- xiaomiking
-
1147 发帖6357 回复18609 积分
- 私信他 +关注
发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖