|
自己編的微波爐定時程序(正計時)有顯示數字突然加速現象。不知問題出在哪里?如何修改?學C51時間不長,懇請達人幫忙。PROTEUS仿真文件在壓縮文件內,下載到實際硬件內也有同樣問題。
#include <REG52.H>
#define uint unsigned int
#define uchar unsigned char
//#define datport P0
//#define wx P2
#define datport P0
#define wx P2
sbit relay=P1^0;
sbit star=P3^2;
sbit off=P3^3;
sbit keyUP=P3^7;
sbit keyDOWN=P3^6;
uchar i;
uchar num=0;
char code SEGTAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delayms(int xms)
{int i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
void my_t0()interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
}
void my_int0()interrupt 0
{
if(star==0)
{delayms(20);
if(star==0)
while(!star);
TR0=1;
relay=0;
//while(!star);
}}
void my_int1()interrupt 2
{
if(off==0)
{delayms(20);
if(off==0)
while(!off);
TR0=0;
relay=1;
//while(!star);
}}
void main()
{uchar cnt, sec=0,min=0;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
PT0=1;
EA=1;
TR0=0;
EX0=1;
EX1=1;
IT1=0;
IT0=0;
while(1)
{
if(keyUP==0) //如果S1鍵按下
{
delayms(20); //延時一段時間
if(keyUP==0) //如果再次檢測到S1鍵按下
{
cnt++;
while(!keyUP);
if(cnt==10)
cnt=0;
}}
if(keyDOWN==0) //如果S1鍵按下
{
delayms(20); //延時一段時間
if(keyDOWN==0) //如果再次檢測到S1鍵按下
{
cnt--;
while(!keyDOWN);
if(cnt==0)
cnt=10;
}}
if(num==20)
{
//min--;
//sec=59;
sec++;
//min--;
num=0;
if(sec==60)
{min++;
sec=0;
if(min==9||min==cnt)
{sec=0;
// if(min==0&&sec==0)
// {
TR0=0;
relay=1;
}}}
wx=0xfe;
datport=SEGTAB[sec%10];
delayms(4);
wx=0xff;
wx=0xfd;
datport=SEGTAB[sec/10%10];
delayms(4);
wx=0xff;
wx=0xfb;
datport=SEGTAB[min%10];
delayms(4);
wx=0xff;
wx=0xf7;
//datport=SEGTAB[min/10%10];
datport=SEGTAB[cnt%10];
delayms(4);
wx=0xff;
} }
|
-
-
微波爐定時器.rar
2016-2-3 18:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51.57 KB, 下載次數: 5, 下載積分: 黑幣 -5
微波爐定時器
-
-
微波爐定時器.rar
2016-2-3 19:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51.57 KB, 下載次數: 5, 下載積分: 黑幣 -5
|