您现在的位置:首页 > 科技成果科技成果

请各位大神帮我看下代码那里问题

发布时间:2021-10-03 10:38:32  来源:大电流电感厂家   查看:
电路是P0接的J12,P1接的J16.单片机采用STC90C516RC+,现在想实现0-60动态显示。现在显示出现8个数码管都会显示,但是前面2个数码管可以正常从0-60的增加再重复。现在想只要前面2个数码管显示即可,代码如下,请各位看看那里出错了。代码:
#include
#include        //**延时函数头文件**//
#define uchar unsigned char
#define uint unsigned int
uint count=0,sec=0;
uchar table[10]=
{0Xfc,0X60,0Xda,0xf2,
0x66,0xb6,0xbe,0xe0,0xfe,                                                
0xf6,};
uchar  wei[]=
{0Xfe,0Xfd
};
void Delay10ms()                //@12.000MHz  //延时10MS//STC软件复制
{
        unsigned char i, j;

        i = 20;
        j = 113;
        do
        {
                while (--j);
        } while (--i);
}
void display()                //显示函数//
{
        uchar i,temp=0x01;
        wei[1]=sec/10;
        wei[0]=sec%10;
        for(i=0;i<2;i++)
        {
                P0=table[wei];
                P1=temp;
                Delay10ms();
                P0=0XFF;
                P1=0XFF;
                temp<<=1;
               
        
        }
}
void time0()interrupt 1
{
        TH0=(65536-50000);         //高8位给初值//
        TL0=(65536-50000);         //低8位给初值//
        if(++count==50)                 //定时器延时1秒//
        {
                count=0;           //到1秒清零//
                sec++;                   //开始计数//
                if(sec==60)           //如果计数到60秒就清0//
                sec=0;
        }        



}
void main(void)
{
        TMOD=0X01;                         //开启定时器0//
        TH0=(65536-50000);         //高8位给初值//
        TL0=(65536-50000);         //低8位给初值//
        IE=0X82;
        TR0=1;                        //开启计数//
        while(1)                 //循环计数//
        {
                        
           display();

                                                                                                
        }
}



共阴数码管却选择了共阳数码的位选方式,从程序看P0口是段选,P1口是位选,所以把位选改一改应该就可以了
把 P0=table[wei];
                P1=temp;
                Delay10ms();
                P0=0XFF;
                P1=0XFF;
                temp<<=1;
里的P1=temp;,改为P1=~temp;,就是取个反

最佳答案
我也是刚学的单片机。 你显示函数里的P1=0XFF不是就选 中了全部数码管吗?我也不懂 就算我说错了  也别太在意哈。


数码管共阴极,0XFF,是关闭数码管显示,百度一下看一下数码管的连接方式,是不是table里面的数组错了,具体怎么显示的又没有照片,只能推断了


达菲奇 发表于 2017-9-21 16:55
数码管共阴极,0XFF,是关闭数码管显示,百度一下看一下数码管的连接方式,是不是table里面的数组错了,具体怎么显示的又没有照片,只能推断了

这个简单,明日再来回答你的问题。有事先下了。


修罗君 发表于 2017-9-21 18:33
如果是共阴数码管那他0到10的数组好像就是不正确的吧?

达菲奇 发表于 2017-9-22 08:52
不用如果,这就是共阴极

修罗君 发表于 2017-9-22 11:43
我都懵逼了。。。。0x3F,0x06, 0x5B, 0x4F,0x66,0x6D,0x7D, 0x07, 0x7F,  0x6F,
共阴极的数组不是这个吗?麻烦你给我解释下是不是楼主上面的是另外一种方法?我也是刚学。

想要控制哪个数码管灭,就给阴极加上高电平,就是J16,P1脚,代码里面的temp


按照人中狼 的程序,只要把P1口取反即可。P1=~temp.

基于DSP和CAN总线的数据采集与处理系统引言随着计算机技术 通信技术和电子技术的迅猛发展,电力系统自动化程度也日益提高,通过现场总线技术和数字信号处理技术的应用提高了电力系统的可靠性和可维护性。本文将TMS320LF2407A芯片和CAN总

DC/DC在接口电路与放大器的电路设计方案1 引言目前随着我国电子工业的不断发展,开关电源的应用也越来越受到该应用领域中技术人员的重视,产品包括ac/dc,dc/dc及dc/ac等,其中多以pwm模式为主。在实际使用中常会碰到一些技术性问题,

Proteus的定位系统仿真设计引 言随着单片机技术在工控领域及社会生活的各个方面得到广泛应用,对单片机开发成本及速度的要求也越来越高。按照传统的模式,在整个项目开发过程中,先根据控制系统要求设计原理图,制作硬件电路;然后进行软件编

CopyRight2014
大电流电感 | 大功率电感 | 扁平线圈电感 注塑加工厂