大家好,请帮我查看一下程序。
#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½ÅÊä³öµÍµçƽ
}
}
}
}
这不是我上次帮你看过的程序吗?
你的代码需要实现什么功能,目前运行出现什么不正常的显现,你都需要具体说明
否则大家真没有时间来分析你程序中的逻辑 代码测试。没有出现问题,要经过老师您分析一下。才放心。老师辛苦了,谢谢
需要的功能。电压比较程序
单片机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配高阻输入。
你先将你画的原理图的 PDF 发上来,广大热心网友帮你检查下,有时间学习下冲哥的视频
页:
[1]