微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这程序哪出错了,求指教!

这程序哪出错了,求指教!

时间:10-02 整理:3721RD 点击:
我想用定时器T0的工作方式0去定时60秒,并显示在数码管上;为什么我的程序下载到PROTUES中数字1、2、3和7不显示。谁能告诉我这程序哪里出错了吗?
#include<reg52.h>
typedef unsigned char CHAR;
typedef unsigned int INT;
CHAR code LED_CODES[]=
{  0xc0,0xF9,0xA4,0xB0,0x99,//0-4
      0x92,0x82,0xF8,0x80,0x90,//5-9
           };
sbit dula = P2^7;//段选信号
sbit wela = P2^6;//位选信号
void display(CHAR,CHAR);//显示函数
CHAR shi,ge,j,i;
void delayxms(INT x){     //延时X毫秒
        INT m,n;
                for(m=x;m>0;m--)
                        for(n=110;n>0;n--);
}       
void init(){   //初始化
        TMOD = 0x01;//定义定时器0的工作方式1
        TH0 = (65536-50000)/256;//装初值
        TL0 = (65536-50000)%256;
        EA = 1;//开总中断
        ET0 = 1;//开定时器中断
        TR0 = 1;//启动定时器
}  
void main(){
        init();
        while(1){
                display(shi,ge);//调用显示函数
        }
}
//显示函数,显示个位和十位
void display(CHAR shi,CHAR ge){
        wela = 1;
        P1 = 0x10;
        wela = 0;
        P1 = 0xff;
        dula = 1;
        P1 = LED_CODES[shi];
        dula = 0;
        delayxms(5);       
        wela = 1;
        P1 = 0x20;
        wela = 0;
        P1 = 0xff;
        dula = 1;
        P1 = LED_CODES[ge];
        dula = 0;
        delayxms(5);       
}
//中断函数
void T0_timer() interrupt 1{
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        j++;
        if(j==20){
                j=0;
                i++;
                if(i==60)
                        i = 0;
                        shi = i/10;
                        ge = i%10;
        }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top