久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 求助,不知道單片機(jī)程序問題出在了哪里? [打印本頁]

作者: 夏伊    時(shí)間: 2018-3-30 17:18
標(biāo)題: 求助,不知道單片機(jī)程序問題出在了哪里?
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

#define LCDSIG P0                  //lcd的信號控制引腳
sbit lcdrs=P1^3;
sbit lcdrw=P1^4;
sbit lcdep=P1^5;

sbit p16=P1^6;
sbit p17=P1^7;

sbit ISDEOM = P2^3;           //ISD25120控制引腳
sbit ISDPR = P2^2;
sbit ISDPD = P2^4;
sbit ISDCE = P2^5;

//sbit key1=P1^0;                   //定義按鍵
sbit key2=P1^2;                   // add1 key
sbit key3=P1^1;                   //select key
sbit key4=P1^0;                  //playkey


uchar code str1[]={"Sum:0 Remain:120"};
uchar code str2[]={"Present:0       "};
uchar code str3[]={"PLAY MODE       "};
uchar code str4[]={"Section:1       "};
uchar code str_clean[]={"0  "};

uint num;        //存儲時(shí)間并傳送到顯示屏
uint timerFlag=0,stopFlag = 0,over=0;
uint recordingFlag=0,playingFlag = 0;
uint count;
uint sum=0,remain=120;
uchar str_num[3]={""};
uchar str_count[3]={""};
uchar str_sum[3],str_remain[3];
//ISD25120
uint time=0;
uint add[25];


void delay(uint x)
{
        uint y;
        for(x;x>0;x--)
                for(y=110;y>0;y--);
}


uint tiqu(uint number,char *p)  //提取數(shù)組并放入字符串?dāng)?shù)組中,正序
{
        int a,/*10的倍數(shù)*/b/*數(shù)組長度*/;
        int c,/*臨時(shí)盛放每一位數(shù)*/i/*添加的位置*/;
        if (number == 0)
        {
                *p=0+48;
                *(p+1)='\0';
                return 0;
        }
        else
        {
                for(a=1,b=0;number / a;a*=10,b+=1);
                for(a=1,i=0; number/a ;i++,a*=10)
                {
                        c=number/a%10;
                        *(p+b-1-i)=c+48;
                }
                *(p+b)='\0';        //為數(shù)組添加結(jié)尾

        }
   return 0;
}




bit lcd_bz()         // 讀忙信號
{
  bit result;
  lcdrs=0;           // 讀忙信號
  lcdrw=1;
  lcdep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  result = (bit)(LCDSIG&0x80);
  lcdep=0;
  return result;
}

void lcd_wcmd (uchar cmd)                //寫命令
{
  while (lcd_bz());
  lcdrs=0;
  lcdrw=0;
  lcdep=0;
  _nop_();
  _nop_();
  LCDSIG=cmd ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdep=0;
}

void lcd_pos (uchar pos)                //寫位置
{
  lcd_wcmd (pos|0x80);
}

void lcd_wdat (uchar dat)           //寫數(shù)據(jù)
{
   while (lcd_bz());
  lcdrs=1;
  lcdrw=0;
  lcdep=0;
  _nop_();
  _nop_();
  LCDSIG=dat ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdep=0;
}

void init ()                           //初始化
{
        //lcdinit
        lcd_wcmd (0x38);
        delay (1);
        lcd_wcmd (0x0c);
        delay (1);
        lcd_wcmd (0x06);
        delay (1);
        lcd_wcmd (0x01);
        delay (1);
        //init timer
        EA=1;                   //總中斷打開
        TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
        TH0=(65536-50000)/256;                //重新賦值
        TL0=(65536-50000)%256;
        ET0=1;           //定時(shí)器中斷打開
        TR0=0;
        //isd25120

}


void record()
{
        ISDPR = 0;
        ISDPD = 0;
        ISDCE = 0;
}

void playback()
{
        ISDPR = 1;
        ISDPD = 0;
        ISDCE = 0;                        
}



void delievr(int time)
{
        int sect;
        sect=time/0.2;
        if(sect<256)
        {        P3=sect; p16=0; p17=0;        }
        else
        {
                if(sect<512)
                {        P3=sect-256; p16=1; p17=0;        }
                else
                {        P3=sect-512; p16=0; p17=1;        }
        }
}


void show(char *p,uint pos)
{
        int i=0;
        lcd_pos (pos);
        while (*(p+i)!='\0')
        {
                lcd_wdat (*(p+i));
                i++;        
        }
}

void end()
{
        tiqu(sum,str_sum);
        show(str_sum,0x80+4);
        tiqu(remain,str_remain);
        show(str_remain,0x80+13);
}

void recordmode()
{
        while(timerFlag)
        {
                if(over)
                {                                
                        end();
                        recordingFlag=!recordingFlag;
                        over = 0;
                }
                tiqu(num,str_num);
                show(str_num,0x40+8);
                timerFlag=0;
        }
        if(stopFlag)
        {
                show(str_clean,0x80+13);
                show(str_clean,0x40+8);
                tiqu(sum,str_sum);
                show(str_sum,0x80+4);
                tiqu(remain,str_remain);
                show(str_remain,0x80+13);
                stopFlag = 0 ;        
        }

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void play()
{

        while(playingFlag)
        {
                int i=1;
                int count = 1 ;
                show(str3,0);
                show(str4,0x40);

                while(i)
                {
                        if(key4==0)
                        {
                                delay(5);
                                if(key4==0)
                                {
                                        while(!key4);
                                        ///播放******
                                        if(count==1)
                                        {
                                                delievr(add[0]);
                                                playback();               
                                                delay(add[0]);                這里想delay數(shù)組中元素?cái)?shù)值那么長時(shí)間,一直沒有實(shí)現(xiàn),不知道問題出在了哪里。   
                                                ISDPD=1;                         上面playback函數(shù)可以使用,就是無法延時(shí)
                                        }
                                        else
                                        {
                                                delievr(add[count-1]-add[count-2]);
                                                playback();
                                                delay(add[count-1]-add[count-2]);
                                                ISDPD=1;
                                        }
                                }
                        }
                        if(key3==0)
                        {
                                delay(5);
                                if(key3==0)
                                {
                                        while(!key3);
                                        i=0;
                                        playingFlag=0;
                                        show(str1,0);
                                        show(str2,0x40);
                                        show(str_clean,0x80+13);
                                        tiqu(sum,str_sum);
                                        show(str_sum,0x80+4);
                                        tiqu(remain,str_remain);
                                        show(str_remain,0x80+13);

                                }
                        }
                        if(key2==0)
                        {
                                delay(5);
                                if(key2==0)
                                {
                                        while(!key2);
                                        if(count < sum)
                                        {
                                                count++;
                                                tiqu(count,str_count);
                                                show(str_count,0x40+8);                                                
                                        }
                                        else
                                        {
                                                count = 1;
                                                tiqu(count,str_count);
                                                show(str_count,0x40+8);                                                
                                        }

                                       
                                }
                        }
        
                }
        }
}

void keyscan()
{
        if(key4==0)
        {
                delay(5);
                if(key4==0)
                {
                        while(!key4);
                        recordingFlag = !recordingFlag;
                        if(recordingFlag)
                        {
                                TR0=1;
                                delievr(time);
                                record();
                        }
                        else
                        {
                                TR0=0;
                                stopFlag =1;
                                sum++;
                                remain-=num;
                                time+=num;
                                num=0;
                                ////////
                                ISDPD=1;
                                add[sum-1]=time;
                                ////////
                        }
                }
        }
        if(!recordingFlag && key3 == 0)
        {
                delay(5);
                if(key3==0)
                {
                        while(!key3);
                        playingFlag=1;
                }
        }
        
}

void main ()
{
        init ();

        show(str1,0x80);
        show(str2,0x40);
                                            
        num=0;
        while(1)
        {
                keyscan();
                recordmode();
                play();
                        
        }
}

void Timer0_isr(void) interrupt 1 using 1          //計(jì)時(shí)器中斷程序
{
        TH0=(65536-50000)/256;                //重新賦值
        TL0=(65536-50000)%256;
        count++;
        if(count==19)
        {
                count=0;
                num++;
                timerFlag=1;
        }
        if(num == remain)
        {
                TR0=0;
                over=1;
                sum++;
                remain = 120;
        }  
}





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲成人一级片 | 成人午夜影院 | 欧美日产国产成人免费图片 | 一级毛片在线播放 | 久久高清 | 国产精品国产三级国产aⅴ中文 | 玖玖精品 | 欧美日韩在线视频一区二区 | 爱爱免费视频网站 | 天天综合网7799精品 | 国产午夜精品一区二区三区嫩草 | 国产欧美在线一区二区 | 欧美激情精品久久久久 | 久草视频观看 | 天天摸天天干 | 超碰在线人人 | 日本亚洲欧美 | 久久精品国产精品青草 | 精久久 | 午夜久久久久久久久久一区二区 | 青青草久久| 亚洲精品日韩在线 | 久久伊人久久 | 欧美一区二区三区电影 | 午夜天堂 | 午夜爱爱网 | 日日夜夜天天 | 精品国产综合 | 久久一二区 | 日韩日韩日韩日韩日韩日韩日韩 | 国产精品久久国产愉拍 | 欧美黑人体内she精在线观看 | 国产午夜亚洲精品不卡 | 亚洲成人一区二区 | 日本福利视频免费观看 | 国产精品久久久久久 | 草草视频在线观看 | 一区二区三区四区免费视频 | 亚洲高清视频在线观看 | 老头搡老女人毛片视频在线看 | 日韩欧美一区二区三区免费观看 |