找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 387|回复: 4
打印 上一主题 下一主题
收起左侧

STC8H1K单片机程序 数码管不能点亮?

[复制链接]
跳转到指定楼层
楼主
ID:72649 发表于 2023-12-31 12:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"stc8h.h"


//        #define a 0x08            // AAAAA   P27-P20  a~dp  1111  1111
//        #define b 0x04            // F   B       P27  26 25 24 23 22 21 20
//        #define c 0x02            // F   B        a    b  c  d  e  f  g  dp
//        #define d 0x01            // GGGGG
//        #define e 0x80            // E   C
//        #define f 0x40            // E   C
//        #define g 0x20            // DDDDD  DP
//        #define db 0x10
//        #define NEG 0x10             //负号号的宏定义

        #define a 0x80            // AAAAA   P27-P20  a~dp  1111  1111
        #define b 0x40            // F   B       P27  26 25 24 23 22 21 20
        #define c 0x20            // F   B        a    b  c  d  e  f  g  dp
        #define d 0x10            // GGGGG
        #define e 0x08            // E   C
        #define f 0x04            // E   C
        #define g 0x02            // DDDDD  DP
        #define db 0x01
        #define NEG 0x02            //负号号的宏定义

const  char LED_TAB[]={

                                                                                                        ~(a+b+c+d+e+f),      //Displays"0"
                                                                                                        ~(b+c),              //Displays"1"
                                                                                                        ~(a+b+d+e+g),        //Displays"2"     
                                                                                                        ~(a+b+c+d+g),        //Displays"3"
                                                                                                        ~(b+c+f+g),          //Displays"4"
                                                                                                        ~(a+d+f+g+c),        //Displays"5"     
                                                                                                        ~(a+c+d+e+f+g),      //Displays"6"
                                                                                                        ~(a+b+c),            //Displays"7"
                                                                                                        ~(a+b+c+d+e+f+g),    //Displays"8"
                                                                                                        ~(a+b+c+d+f+g),      //Displays"9"
                                                                                                } ;

        #undef a
        #undef b
        #undef c
        #undef d
        #undef e
        #undef f
        #undef g
        #undef db

//code unsigned char LED_TAB[]={//段码
//// 0    1    2    3    4    5    6    7    8    9
//  0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,
//};

//电子温度表测量范围-40-120度
//MF52E 10K at 25, B = 3950, ADC = 12 bits
code unsigned int DuiZhaoBiao[]={//对照表
        140,    //;-40  0
        149,    //;-39  1
        159,    //;-38  2
        168,    //;-37  3
        178,    //;-36  4
        188,    //;-35  5
        199,    //;-34  6
        210,    //;-33  7
        222,    //;-32  8
        233,    //;-31  9
        246,    //;-30  10
        259,    //;-29  11
        272,    //;-28  12
        286,    //;-27  13
        301,    //;-26  14
        317,    //;-25  15
        333,    //;-24  16
        349,    //;-23  17
        367,    //;-22  18
        385,    //;-21  19
        403,    //;-20  20
        423,    //;-19  21
        443,    //;-18  22
        464,    //;-17  23
        486,    //;-16  24
        509,    //;-15  25
        533,    //;-14  26
        558,    //;-13  27
        583,    //;-12  28
        610,    //;-11  29
        638,    //;-10  30
        667,    //;-9   31
        696,    //;-8   32
        727,    //;-7   33
        758,    //;-6   34
        791,    //;-5   35
        824,    //;-4   36
        858,    //;-3   37
        893,    //;-2   38
        929,    //;-1   39
        965,    //;0    40
        1003,   //;1    41
        1041,   //;2    42
        1080,   //;3    43
        1119,   //;4    44
        1160,   //;5    45
        1201,   //;6    46
        1243,   //;7    47
        1285,   //;8    48
        1328,   //;9    49
        1371,   //;10   50
        1414,   //;11   51
        1459,   //;12   52
        1503,   //;13   53
        1548,   //;14   54
        1593,   //;15   55
        1638,   //;16   56
        1684,   //;17   57
        1730,   //;18   58
        1775,   //;19   59
        1821,   //;20   60
        1867,   //;21   61
        1912,   //;22   62
        1958,   //;23   63
        2003,   //;24   64
        2048,   //;25   65
        2093,   //;26   66
        2137,   //;27   67
        2182,   //;28   68
        2225,   //;29   69
        2269,   //;30   70
        2312,   //;31   71
        2354,   //;32   72
        2397,   //;33   73
        2438,   //;34   74
        2479,   //;35   75
        2519,   //;36   76
        2559,   //;37   77
        2598,   //;38   78
        2637,   //;39   79
        2675,   //;40   80
        2712,   //;41   81
        2748,   //;42   82
        2784,   //;43   83
        2819,   //;44   84
        2853,   //;45   85
        2887,   //;46   86
        2920,   //;47   87
        2952,   //;48   88
        2984,   //;49   89
        3014,   //;50   90
        3044,   //;51   91
        3073,   //;52   92
        3102,   //;53   93
        3130,   //;54   94
        3157,   //;55   95
        3183,   //;56   96
        3209,   //;57   97
        3234,   //;58   98
        3259,   //;59   99
        3283,   //;60   100
        3306,   //;61   101
        3328,   //;62   102
        3351,   //;63   103
        3372,   //;64   104
        3393,   //;65   105
        3413,   //;66   106
        3432,   //;67   107
        3452,   //;68   108
        3470,   //;69   109
        3488,   //;70   110
        3506,   //;71   111
        3523,   //;72   112
        3539,   //;73   113
        3555,   //;74   114
        3571,   //;75   115
        3586,   //;76   116
        3601,   //;77   117
        3615,   //;78   118
        3628,   //;79   119
        3642,   //;80   120
        3655,   //;81   121
        3667,   //;82   122
        3679,   //;83   123
        3691,   //;84   124
        3702,   //;85   125
        3714,   //;86   126
        3724,   //;87   127
        3735,   //;88   128
        3745,   //;89   129
        3754,   //;90   130
        3764,   //;91   131
        3773,   //;92   132
        3782,   //;93   133
        3791,   //;94   134
        3799,   //;95   135
        3807,   //;96   136
        3815,   //;97   137
        3822,   //;98   138
        3830,   //;99   139
        3837,   //;100  140
        3844,   //;101  141
        3850,   //;102  142
        3857,   //;103  143
        3863,   //;104  144
        3869,   //;105  145
        3875,   //;106  146
        3881,   //;107  147
        3887,   //;108  148
        3892,   //;109  149
        3897,   //;110  150
        3902,   //;111  151
        3907,   //;112  152
        3912,   //;113  153
        3917,   //;114  154
        3921,   //;115  155
        3926,   //;116  156
        3930,   //;117  157
        3934,   //;118  158
        3938,   //;119  159
        3942    //;120  160
};
                                                                                                
unsigned int caiji_wendu,tingzhi_wendu,kaiji_wendu,x_display;

                                                                                                
sbit tingzhi_key_up = P0^3 ;
sbit tingzhi_key_down = P5^4 ;
sbit kaiji_key_up = P3^6 ;
sbit kaiji_key_down = P3^7 ;        

sbit On_off = P3^4 ;               
sbit out = P3^5 ;        
sbit FMQ = P3^2 ;        

#define SMG_WeiShu  10  //数码管位数
idata unsigned char SMG_HuanCun[SMG_WeiShu];//数码管缓存
                                                                                                
void IO_csh();
void DelayXms(unsigned char X);        
void loop();
void TM0_init();

void DelayXms(unsigned char X)        //@11.0592MHz
{
        unsigned char data i, j;
                while(X--)
                {
                        i = 15;
                        j = 90;
                        do
                        {
                                while (--j);
                        } while (--i);
                }
}


void loop()
        {

  }



void IO_csh()
{
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0xc0;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
}

void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
                                TL0 = 0xCD;                                //设置定时初始值
                                TH0 = 0xD4;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志

        TR0 = 1;                                //定时器0开始计时
//              EA = 1;
        ET0 = 1;      //开T0中断     
}

void Timer1_Init(void)                //1毫秒@11.0592MHz
{
    TMOD = 0x00;
    TL1 = 0xCD;;                                 //65536-11.0592M/12/1000
    TH1 = 0xD4;
    TR1 = 1;                                    //启动定时器
    ET1 = 1;                                    //使能定时器中断
//    EA = 1;
}


void adc_Init(void)                //1毫秒@11.0592MHz
{
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x00;
    ADC_CONTR = 0xc0;                           //使能并启动ADC模块
    EADC = 1;                                   //使能ADC中断
//    EA = 1;
}

void main()
        {               
                On_off = 1 ;
                caiji_wendu = 2555 ;
                tingzhi_wendu = 200 ;
                kaiji_wendu = 555 ;

                IO_csh();        
    Timer0_init() ;
    Timer1_Init() ;
                adc_Init() ;        
               
    EA = 1;       //开总中断
               
                while (1)
                        {
                SMG_HuanCun[0] =  LED_TAB[tingzhi_wendu % 10 ];
                SMG_HuanCun[1] =  LED_TAB[tingzhi_wendu / 10 % 10 ];
                SMG_HuanCun[2] =  LED_TAB[tingzhi_wendu / 100 % 10 ];
                                
                SMG_HuanCun[7] =  LED_TAB[kaiji_wendu % 10 ];
                SMG_HuanCun[8] =  LED_TAB[kaiji_wendu / 10 % 10 ];
                SMG_HuanCun[9] =  LED_TAB[kaiji_wendu / 100 % 10 ];
                        }
  }


        
SMG_SaoMiao()interrupt 1{      //数码管扫描定时器0


        static idata unsigned char a;
        switch(a){
                        case1:                                                                                  //第一组数码管
                        P10 = 0;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;
                        
                        case2:
                        P10 = 1;P11 = 0;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;
                        
                        case3:
                        P10 = 1;P11 = 1;P12 = 0;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;                                                                              
                        
                        case4:                                                                                   //第二组数码管
                        P10 = 1;P11 = 1;P12 = 1;P13 = 0;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;
                        
                        case5:
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 0;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;
                        
                        case6:
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 0;P33 = 1;P00 = 1;P01 = 1;P02 = 1;
                                break;
                        
                        case7:                     
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 0;P00 = 1;P01 = 1;P02 = 1;
                                break;                                                                             
                                
                        case8:                                                                                   //第三组数码管
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 0;P01 = 1;P02 = 1;
                                break;
                                
                        case9:
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 0;P02 = 1;
                                break;
                                
                        case10:                     
                        P10 = 1;P11 = 1;P12 = 1;P13 = 1;P14 = 1;P15 = 1;P33 = 1;P00 = 1;P01 = 1;P02 = 0;
                                break;
        }
        P2=SMG_HuanCun[a];
        if(++a>=SMG_WeiShu)a=0;
//                                FMQ = !FMQ ;   //测试端口
}        
        
        
void TM1_Isr() interrupt 3      //定时器1
{
    idata unsigned char HM;
          if(++HM>1){//调节刷新速度
                HM=0;
          ADC_CONTR=0xC7;//开始测量ADC

//                        FMQ = !FMQ ;   //测试端口
        }                             
        
}        
        
        
void ADC_Isr() interrupt 5
{

                                
                SMG_HuanCun[3] =  LED_TAB[caiji_wendu%10 ];
                SMG_HuanCun[4] =  LED_TAB[caiji_wendu/10%10 ];
                SMG_HuanCun[5] =  LED_TAB[caiji_wendu/100%10 ];               
                SMG_HuanCun[6] =  LED_TAB[caiji_wendu/1000%10 ];
                                

}        

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:68189 发表于 2023-12-31 22:02 | 只看该作者
共阴数码管,你的段码驱动不用推挽的吗?
回复

使用道具 举报

板凳
ID:1057978 发表于 2024-1-1 11:08 | 只看该作者
先点亮一个的一段,再点亮一个,再点亮多个,
回复

使用道具 举报

地板
ID:72649 发表于 2024-1-1 11:37 来自手机 | 只看该作者
wpppmlah 发表于 2023-12-31 22:02
共阴数码管,你的段码驱动不用推挽的吗?

用的共阳数码管
回复

使用道具 举报

5#
ID:1107339 发表于 2024-1-1 15:44 | 只看该作者
正在尝试点fj3461AH,4位数码管。先多学习前辈的代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表