单片机源程序如下:
- #include "STC8H.h"
- #include "intrins.h"
- unsigned char NixieTable[]={ 0x03,/*0*/
- 0x9F,/*1*/
- 0x25,/*2*/
- 0x0D,/*3*/
- 0x99,/*4*/
- 0x49,/*5*/
- 0x41,/*6*/
- 0x1F,/*7*/
- 0x01,/*8*/
- 0x09,/*9*/};
- void Delay1ms() //@11.0592MHz
- {
- unsigned char i, j;
- i = 15;
- j = 90;
- do
- {
- while (--j);
- } while (--i);
- }
- void DelayXms(unsigned int x) //@11.0592MHz
- {
- while (--x)
- {
- Delay1ms();
- }
- }
- /************************************************
- * 函数名: void Led_Code(Lint date)
- * 功 能: 数码管显示函数
- * 参 数: 无符号长整型,要显示的数字
- * 返回值: 无
- ***********************************************/
- void Led_adc(unsigned int date) //显示函数
- {
- unsigned int a,b,c,d;
-
- a=date/1000%10; //求千位
- b=date/100%10; //求百位
- c=date/10%10; //求十位
- d=date%10; //求个位
-
- P10=1;P11=1;P12=1;P13=1;
- P2=NixieTable[a]; //千
- P10=0;P11=1;P12=1;P13=1;
- DelayXms(2);
-
- P10=1;P11=1;P12=1;P13=1;
- P2=NixieTable[b]; //百
- P11=0;//P12=1;P13=1; P10=1;
- DelayXms(2);
-
- P10=1;P11=1;P12=1;P13=1;
- P2=NixieTable[c]; //十
- P12=0;P13=1;P10=1;P11=1;
- DelayXms(2);
-
- P10=1;P11=1;P12=1;P13=1;
- P2=NixieTable[d]; //个
- P13=0;P10=1;P11=1;P12=1;
- DelayXms(2);
- }
- /************************************************
- * 函数名: void Led_Code(Lint date)
- * 功 能: 数码管显示函数
- * 参 数: 无符号长整型,要显示的数字
- * 返回值: 无
- ***********************************************/
- void Led_Off(unsigned int date) //显示函数
- {
- unsigned int a,b,c;
-
- a=date/100%10; //求百位
- b=date/10%10; //求十位
- c=date%10; //求个位
-
- P14=1;P15=1;P33=1;
- P2=NixieTable[a];//百位
- P14=0;P15=1;P33=1;
- DelayXms(2);
-
- P14=1;P15=1;P33=1;
- P2=NixieTable[b];//十位
- P15=0;P33=1;P14=1;
- DelayXms(2);
-
- P14=1;P15=1;P33=1;
- P2=NixieTable[c];//个位
- P33=0;P14=1;P15=1;
- DelayXms(2);
- }
- /************************************************
- * 函数名: void Led_Code(Lint date)
- * 功 能: 数码管显示函数
- * 参 数: 无符号长整型,要显示的数字
- * 返回值: 无
- ***********************************************/
- void Led_On(unsigned int date) //显示函数
- {
- unsigned int a,b,c;
-
- a=date/100%10; //求百位
- b=date/10%10; //求十位
- c=date%10; //求个位
-
- P00=1;P01=1;P02=1;
- P2=NixieTable[a];//百位
- P00=0;P01=1;P02=1;
- DelayXms(2);
-
- P00=1;P01=1;P02=1;
- P2=NixieTable[b];//十位
- P01=0;P02=1;P00=1;
- DelayXms(2);
-
- P00=1;P01=1;P02=1;
- P2=NixieTable[c];//个位
- P02=0;P00=1;P01=1;
- DelayXms(2);
- }
- void main ()
- { P0M0 = 0x07; P0M1 = 0x00;
- P1M0 = 0x00; P1M1 = 0xc0;
- P2M0 = 0xff; P2M1 = 0x00;
- P3M0 = 0x08; P3M1 = 0x00;
- Timer0_init() ;
- Timer2_init();
- Timer3_init();
- while(1)
- {
- }
- }
- SMG_SaoMiao()interrupt 1
- { //数码管扫描定时器0
- unsigned int s;
- if(++s>1)
- { s=0;
- Led_adc(temperature) ;
- }
- }
- void TM2_Isr() interrupt 12
- {
- unsigned int s;
- kaiji_wendu = 012;
- tingzhi_wendu = 055 ;
- if(++s>1)
- { s=0;
- Led_On(kaiji_wendu) ;
-
- }
- }
- void TM3_Isr() interrupt 19
- {
- unsigned int s;
- tingzhi_wendu = 055 ;
- if(++s>1)
- { s=0;
- Led_Off(tingzhi_wendu);
- }
- }
复制代码
数码管亮度显示不一致,是什么原因?
|