السلام عليكم
اكتب لنا الكود حتى نفهم اكتر ونقدر نساعدك باذن الله
|
حسنا هذا هو الكود:
كود:
#define value adc_read(0)
char matrix[]={192,249,164,176,153,146,130,248,128,144,191};
char matrix1[]={64,121,36,48,25,18,2,120,0,16};
unsigned int resulte1=0,cf;
unsigned short a , cc=0 , df=0 , nn=0, motor=0, CNT=0, b=0, resulte2=0, dd=0, SECONDS=0, minute=0, hore=0 ;
float Vt,Rt,temp,y,ffv;
int n=0;
void segment(unsigned int nn)
{
portb=255;portc=1;
portb=matrix[nn/100];delay_ms(2);
portb=255;portc=2;
portb=matrix1[nn%100/10];delay_ms(2);
portb=255;portc=4;
portb=matrix[nn%100%10];delay_ms(2);
}
void temperatur()
{
Vt = 5.0 * value / 1024.0;
Rt = Vt * 7340.0 / (5.0 - Vt);
y = log(Rt/15600.0);
y = (1.0/298.15) + (y *(1.0/4950.0));
}
void test1_temp()
{
while(temp < ffv)
{
portd.f6=1;
resulte1 = temp*10;
segment(resulte1); portb=255;portc=8; portb=198; delay_ms(5); // segment
a++;
if(a==80){ temperatur(); temp=1.0/y; temp = temp -273.15; a=0; }
if(porta.f3==0) { dd=1;; while(porta.f3==0); }
if(dd != 0)break;
}
}
void test2_temp()
{
while(temp > ffv - 0.2) //ffv/10) - 0.2
{
portd.f6=0;
resulte1 = temp*10;
segment(resulte1); portb=255;portc=8; portb=198; delay_ms(5); // segment
a++;
if(a==80){ temperatur(); temp=1.0/y; temp = temp -273.15; a=0; }
if(porta.f3==0) { dd=1;; while(porta.f3==0); }
if(dd != 0)break;
}
}
void cunter1()
{
while(dd==1){
segment(n); // segment
if(porta.f1==0) { n = n + 1; while(porta.f1==0); }
if(porta.f2==0) { n = n - 1;while(porta.f2==0); }
if(n>450) { n=450; }
if(n<0) { n=0; }
if(porta.f3==0) { ffv=n/10; dd=2; while(porta.f3==0); }
}
}
void ddd()
{
while(dd==2){
segment(nn); portb=255;portc=8; portb=240; delay_ms(5);
if(porta.f1==0) { nn = nn + 1; while(porta.f1==0); }
if(porta.f2==0) { nn = nn - 1;while(porta.f2==0); }
if(nn>10) { nn=10; }
if(nn<1) { nn=1; }
if(porta.f3==0) { dd=3; while(porta.f3==0); }
}
}
void InitTimer1(){
T1CON = 0x31;
TMR1IF_bit = 0;
TMR1H = 0x6D;
TMR1L = 0x84;
TMR1IE_bit = 1;
INTCON = 0xC0;
}
void segment0(unsigned short nn1 , unsigned short dg)
{
portb=255;portc=16;
portb=matrix1[nn1];delay_ms(2);
portb=255;portc=32;
portb=matrix[dg%100/10];delay_ms(2);
portb=255;portc=64;
portb=matrix[dg%100%10];delay_ms(2);
}
void segment1()
{
portb=255;portc=16;
portb=matrix[10];delay_ms(2);
portb=255;portc=32;
portb=matrix[10];delay_ms(2);
portb=255;portc=64;
portb=matrix[10];delay_ms(2);
}
void reglage_hore()
{
segment0(b , resulte2);
if(porta.f1==0) { resulte2=resulte2+5; while(porta.f1==0); if(b==9) { if(resulte2>=60 ) { resulte2=55; b==9; }} if(resulte2==60 ) { resulte2=0; b++; } }
if(porta.f2==0) { resulte2=resulte2-5; while(porta.f2==0); if(b==0) { if(resulte2<5 ) { resulte2=5; b=0; }} if(resulte2>60) { resulte2=55; b--; } }
if(b>=9) { b=9; }
}
void hore_princip()
{
if(resulte2==0){ if(b==0){ resulte2=5;} }
segment0(hore , minute);
//if(porta.f3==0) { dd=3; while(porta.f3==0); }
if(resulte2==minute) { if(b==hore) { portd.f7=1; dd=4; motor=0; } }
while(dd==3){
test1_temp();
test2_temp();
cunter1();
ddd();
reglage_hore();
if(porta.f3==0) {
SECONDS=0; minute=0; hore=0; dd=0; while(porta.f3==0); } }
while(dd==4){
test1_temp();
test2_temp();
cunter1();
ddd();
segment1();
if(motor==3) { portd.f7=0; motor=0; hore=0; minute=0; SECONDS=0; dd=0; }
}
}
//Timer1
//Prescaler 1:8; TMR1 Preload = 28036; Actual Interrupt Time : 100 ms
//Place/Copy this part in declaration section
void Interrupt(){
if (TMR1IF_bit){
TMR1IF_bit = 0;
TMR1H = 0x6D;
TMR1L = 0x84;
CNT++;
if(CNT==10){SECONDS++;CNT=0;motor++; }
if(SECONDS==60){SECONDS=0;minute++; }
if(minute==60){minute=0;hore++;}
if(hore==10) {hore=0;}
}
}
void main()
{
trisa=15;trisb=0;trisc=0; trisd=0;
portb=0;portc=0; portd=0;
adcon1=14;
InitTimer1();
while(1)
{
hore_princip();
}
}