13163935507 发表于 2022-12-23 12:04:06

大家好,请帮我查看一下程序。

#include "reg51.h"
#include "intrins.h"
//STC15w204s
void key_scan(void);        //ÉùÃ÷¿ª¹ØÉ¨Ãè
unsignedchart1=1;        //µÚһ·¶¨Ê±¿ª
unsignedchart2=1;        //µÚ¶þ·¶¨Ê±¿ª
unsigned int hm1,hm2;        //ºÁÃë
unsigned int m1,m2;                //Ãë
sbitb= P3^2;                                //7½ÅָʾµÆ¿ØÖƽÅ
sbit        a=P3^3;                                        //8½Å¿ØÖƽÅ
        sfrCMPCR1=0xE6;        // ±È½ÏÆ÷¿ØÖƼĴæÆ÷1
        #defineCMPEN0x80           //        CMPCR1.7 :±È½ÏÆ÷Ä£¿éʹÄÜλ
        #defineCMPIF0x40                //CMPCR1.6 : ±È½ÏÆ÷Öжϱê־λ
        #definePIE                 0x20           // CMPCR1.5 :±È½ÏÆ÷ÉÏÉýÑØÖжÏʹÄÜλ
        #definePIS0x08                   //CMPCR1.3 :±È½ÏÆ÷Õý¼«Ñ¡Ôñλ
        #defineNIS0x04               //CMPCR1.2 :±È½ÏÆ÷¸º¼«Ñ¡Ôñλ
        #defineCMPOE 0x02                        //CMPCR1.1 :±È½ÏÆ÷Êä³ö½á¹û¿ØÖÆÎ»
        #defineCMPRES 0x01                        //CMPCR1.0 : ±È½ÏÆ÷±È½Ï½á¹û±ê־λ
sfr CMPCR2 = 0xE7;                                 //±È½ÏÆ÷¿ØÖƼĴæÆ÷2
#define INVCMPO 0x80                         //±È½ÏÆ÷½á¹û·´ÏòÊä³ö¿ØÖÆÎ»
#define DISFLT 0x40                         //±È½ÏÆ÷Êä³öÂ˲¨Ê¹ÄÜ¿ØÖÆÎ»
#define LCDTY 0x3F                                 //±È½ÏÆ÷Êä³öµÄÇø¶¶Ê±¼ä¿ØÖÆ
        P5M1        = 0x30;                                                //P5.4½ÅΪ¸ß×èÊäÈëÉùÃ÷
        P5M0         = 0x00;                                                //P5.5½ÅΪ¸ß×èÊäÈëÉùÃ÷
       
void cmp_isr() interrupt 21 using 1 //±È½ÏÆ÷ÖжÏÏòÁ¿Èë¿Ú
{
        CMPCR1 &= ~CMPIF;          //Çå³ýÍê³É±êÖ¾
//        a = !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
//        b = !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
}
void Timer0_Init(void)                //50ºÁÃë12·ÖƵ@11.0592MHz       
{
                TMOD &= 0xF0;                //¶¨Ê±Æ÷ģʽ0
                TL0 = 0x00;                //ÉèÖö¨Ê±Æ÷³õʼ»¯
                TH0 = 0x4C;                //ÉèÖö¨Ê±Æ÷³õʼ»¯
                TF0 = 0;                //Çå³ýTF0±êÖ¾
                TR0 = 1;                //¶¨Ê±Æ÷0¿ªÊ¼¼ÆÊ±¿ª
                ET0=1;                //ʹÄܶ¨Ê±Æ÷ÖжϿª
                EA=1;                //×Ü¿ª¹Ø¿ª
                PT0=1;//¸ßÓÅÏȼ¶       
}
void main()
{
        Timer0_Init();
        CMPCR1 = 0; //³õʼ»¯±È½ÏÆ÷¿ØÖƼĴæÆ÷1
        CMPCR2 = 0;//³õʼ»¯±È½ÏÆ÷¿ØÖƼĴæÆ÷2
        CMPCR1 &= ~PIS; //Ñ¡ÔñÍⲿp5.5Ϊ±È½ÏÆ÷Õý¼«ÊäÈëÔ´
//        CMPCR1 |= NIS; //Ñ¡ÔñÍⲿp5.4Ϊ±È½ÏÆ÷¸º¼«ÊäÈëÔ´
        CMPCR1 &= ~NIS; //Ñ¡ÔñÄÚ²¿BandGapµçѹBGVΪ±È½ÏÆ÷µÄ¸º¼«ÊäÈëÔ´
        CMPCR1 |= CMPEN;//ʹÄÜ±È½ÏÆ÷
        CMPCR1 &= ~CMPIF;          //Çå³ýÍê³É±êÖ¾
        CMPCR2 &= ~DISFLT;        //ʹÄÜ±È½ÏÆ÷Êä³ö¶ËµÄ0.1us ÂËÆÃµç·
        CMPCR1 |= PIE; //±È½ÏÆ÷ÉÏÉýÑØÖжÏʹÄÜλ
        a =~ !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
        b =~ !!(CMPCR1 & CMPRES); //½«±È½ÏÆ÷½á¹ûCMPRESÊä³ö²âÊÔ¿ÚÏÔʾ
//        while (!(CMPCR1 & CMPIF)); //²éѯ±È½ÏÍê³É±êÖ¾
                P5M1        = 0x30;                                        //P5.4½ÅΪ¸ß×èÊäÈë
                P5M0         = 0x00;                                        //P5.4½ÅΪ¸ß×èÊäÈë
while (1)
        {
        static signed char zt=0;                 //״̬»ú ¾²Ì¬±äÁ¿
                {
                if((CMPCR1 & 0x01)==1 && m2 <120)        //µÚ¶þ· ´Óͨµç¿ªÊ¼20·ÖÖÓÒÔÄÚ
                {
                        hm1=0;                //ÇåÁãµÚһ·ºÁÃë
                        m1=0;                        //ÇåÁãµÚһ·Ãë
                }
                }
                switch (zt)                //״̬»ú50ºÁÃë½øÀ´Ò»´Î
        {
                case 0:
                        {                                       
                        if((CMPCR1 & 0x01)==1)        //µÚÒ»´ÎµÈÓÚ50ºÁÃë½øÀ´±È½ÏÆ÷Õý±È¸ºÈ·Êµ¸ß
                        {               
                                zt=1;
                        }
                break;
                }
                        case 1:
                        {
                        if((CMPCR1 & 0x01)==1)        //µÚ¶þ´ÎµÈÓÚ100ºÁÃë½øÀ´±È½ÏÆ÷Õý±È¸ºÈ·Êµ¸ß
                                {               
                                        zt=2;                                                 //״̬2
                                        b=0;                                                //7½ÅÊä³öµÍµçƽÿÂ̵ÆÃð
                                }
                                else
                                        {
                                                zt=0;               //·ñÔò»Øµ½×´Ì¬0
                                        }
                        }
                {       
                break;
                }
                case 2:
                        if((CMPCR1 & 0x01)==0)        //µÚÒ»´ÎµÈÓÚ50ºÁÃë½øÀ´±È½ÏÆ÷Õý±È¸ºÈ·ÊµµÍ
                        {
                                zt=3;                                                        //״̬3
                        }       
                {
                break;
                }
                        case 3:
                {
                        if((CMPCR1 & 0x01)==0)        //µÚ¶þ´ÎµÈÓÚ100ºÁÃë½øÀ´±È½ÏÆ÷Õý±È¸ºÈ·ÊµµÍ
               
                                {
                                        zt=0;
                                        b=1;           //7½ÅÊä³ö¸ßµçƽÿÂ̵ÆÃð
                                }
                                else
                                        {
                                                zt=2;                //·ñÔò»Øµ½×´Ì¬2
                                        }
                break;
                }
                default:
                {
                        break;
                }
                }

        }
}
//¶¨Ê±Æ÷ÖÐ¶Ï ³õʼ»¯
void Timer0_Rountine(void) interrupt 1
{
        if(t1)        //µÚһ·¶¨Ê±20·ÖÖÓ¼Ó±È½ÏÆ÷¸ß30µÈÓÚ50·ÖÖÓÖ®¶à£¬±È½ÏÆ÷µÍÔÝÍ£¼ÆÊ±
        {
                if((CMPCR1 & 0x01)==1)        //±È½ÏÆ÷Õý±È¸ºÈ·Êµ¸ß
                        hm1++;                                //ºÁÃë¼Ó¼Ó       
                        if(hm1==40)                //         µÈÓڴΠ       ÅжÏ50ºÁÃë½øÀ´Ò»´ÎµÈÓÚ2Ãë
                        {
                                hm1        =0;                        //ºÁÃëÇåÁã               
                                        m1++;                        //¼Ó¼Ó
                                        if(m1==900)//³Ë2ÃëµÈÓÚ30·ÖÖÓ
                                        {
                                        m1=0;                //ÃëÇåÁã
                                        a=0;        //8½ÅÊä³öµÍµçƽ       
                                        }
                                }
                        }
        if(t2)                                                        //µÚ¶þ·¶¨Ê±ÎÞÂÛ±È½ÏÆ÷¸ß»¹ÊǵÍ12Сʱ½áÊø
                {
                        hm2++;                      //ºÁÃë¼Ó¼Ó
                        if(hm2 == 200)       //µÈÓÚ10Ãë
                        {
                                hm2 = 0;                        //ÃëÇåÁã
                                m2++;                                        //Ãë¼Ó¼Ó
                                if(m2==4320)        //³Ë10Ãë
                                {
                                        m2=0;                                //ÃëÇåÁã
                                        a=0;                                //8½ÅÊä³öµÍµçƽ       
                                }
                        }       
                }               
        }

zhp 发表于 2022-12-23 17:03:50

这不是我上次帮你看过的程序吗?
你的代码需要实现什么功能,目前运行出现什么不正常的显现,你都需要具体说明
否则大家真没有时间来分析你程序中的逻辑

13163935507 发表于 2022-12-23 18:08:50

代码测试。没有出现问题,要经过老师您分析一下。才放心。老师辛苦了,谢谢
需要的功能。电压比较程序
单片机stc15w204s8个脚。接通电源单片机第2路定时开始计时,12小时时间到p3.3脚输出低电平控制三极管。
p5.5脚电压高于内部1.27v基准电压 ,p3.2脚输出低电平绿灯亮。低于1.27v绿灯灭。
接通电源前20分钟第一路定时不计时,20分钟后绿灯亮开始计时30分钟,绿灯灭暂停 计时 ,时间到p3.3脚输出脚低电平 控制三极管。
p3.2和p3.3配置 弱电输出
p5.5和p5.4配高阻输入。
   

神农鼎 发表于 2022-12-23 19:10:37

你先将你画的原理图的 PDF 发上来,广大热心网友帮你检查下,有时间学习下冲哥的视频
页: [1]
查看完整版本: 大家好,请帮我查看一下程序。