首页 论坛 嵌入式软件专区 ARM/单片机 为什么我无论怎么修改定时器的值从10ms到100us,显示在1602上的数字

发帖 回复

[求助] 为什么我无论怎么修改定时器的值从10ms到100us,显示在1602上的数字
455 查看
1 回复
 楼主 | 发布于 2018-01-30 | 只看楼主
分享到:
 //==============================用户自定义区=====================================
#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 )
回复 举报

回复于 2018-01-30 沙发

没搞过软件,帮顶
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部