天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

技術(shù)支持

初學C.按鍵+ LCD+DS1302+A_D程序

更新時間: 2019-03-23

十年專注單片機方案開發(fā)的方案公司英銳恩,分享初學C.按鍵+ LCD+DS1302+A_D程序。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

#include
#include
#define uchar  unsigned char
#define uint   unsigned int
static volatile unsigned char acc @ 0x20;
static volatile bit acc0     @ (unsigned)&acc*8+0;
static volatile bit acc7     @ (unsigned)&acc*8+7;
#define PORTAIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTCIT(add,bit) ((unsigned)(&add)*8+(bit))

static  bit    RS  @  PORTCIT(PORTC,0);  
static  bit    RW  @  PORTCIT(PORTC,1);  
static  bit    E   @  PORTCIT(PORTC,2);  
static  bit T_RST  @  PORTCIT(PORTC,5);  
static  bit  T_CLK @  PORTCIT(PORTC,6);  
static  bit  T_IO  @  PORTCIT(PORTC,7);  

static  bit  PORTA_0 @  PORTAIT(PORTA,0);   ///*定義PORTA 0位*/
static  bit  PORTA_1 @  PORTAIT(PORTA,1);   ///*定義PORTA 1位*/
static  bit  PORTA_2 @  PORTAIT(PORTA,2);   ///*定義PORTA 2位*/
static  bit  PORTA_5 @  PORTAIT(PORTA,5);   

static  bit  RB_7 @  PORTBIT(PORTB,7);
const   unsigned char  Data[ ]={'0', '1', '2','3','4', '5', '6','7', '8','9',' '};
const   unsigned char  Ds1302[] = {9, 9, 0, 7,  1, 9 ,3,9,  2,4, 5, 9 ,5,9,};
                                                      // // 年  星期   月    日    時   分  秒
const   unsigned char ds1302_sub[ ]={0};
uchar  DisCash[]={0x00,0x30,0x09,0x1,0x06,0x06,0x06};
                              //初始化參數(shù)  秒  分  時  日 月 星期 年
  unsigned  char  y,i;
            char *pc;
  uchar  BCD[3];
uchar get1302[7];
uchar appear[]={0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0};
void Delay   (  );
void enable  ();
void  display();//顯示程序
//延時子程序
void delay()
{  
unsigned  int i=1000;
  while(i--) //for(i=6000;0<i;>  {

  ;  // continue;
     }
}
////////////////十六進制轉(zhuǎn)十進制程序

void  H_BCD (uchar x)
{  
         //i,j,t1,t2;
    BCD [2]=x%10;
    BCD [1]=(x%100)/10;
    BCD [0]=x/100;
}
    
//////////寫入數(shù)據(jù)子程序////////////////////////////
void W_data ()
{
         Delay();//判斷液晶顯示器是否忙
         RS=1;
         RW=0;
         PORTB=y;
       // enable();//寫入控制命令子程序
         E=1;
         E=0;
}

//////寫入控制命令子程序////////////////////////////
void enable  ()
{  Delay();
   RS=0;

  RW=0;
   PORTB =y;
   E=1;
   E=0;
}
///////判斷液晶顯示器是否忙///////////////////////
void Delay ()
{
    RS=0;
    RW=1;
    E=0;
    NOP();
    TRISB=0x80;
    E=1;
while(RB_7==1 )

 {
       RS=0;
       RW=1;
       E=0;
       NOP();
       E=1;
     }
     TRISB=0x00;
}
///////////////////////////////////////////////////////////////////////////

void  interrupt  adint(void)
  {
      ADIF=0;//清/AD中斷標志位
  }

////////系統(tǒng) 各I/O初始化子程序///////////////////////////////////////////
void  initial ()
{   TRISB=0;
    TRISC=0;
    TRISA=0x0ff;
}
//////////A/D轉(zhuǎn)換初始化子程序//////////////////////////////
void  adinitial()
{

ADCON1=15;//;設(shè)置RA為A/D甬道模擬輸入
                   //;RC時鐘。打開A/D轉(zhuǎn)換器。先中通道0
     ADCON0=0x0c1;// B'11000001'   // ;A/D時鐘為RC。RA0作A/D輸入等
       ADIE=1; //時。開放中斷
       ADIF=0; //清/AD中斷標志位   PIR1,
       PEIE=1; //開放外圍部件中斷INTCON,
       GIE=1;   //開放總中斷   INTCON,
}
/////往1302寫入1Byte數(shù)據(jù)////////////////////////
void RTInputByte(uchar d)
{
    uchar i;
    acc = d;
    TRISC=0x00;
    for(i=8; i>0; i--)
    {
      T_IO = acc0;//CARRY;//ACC0;  //*相當于匯編中的 RRC */
      T_CLK = 1;
      T_CLK = 0;

acc = acc >> 1;
    }
}
///////從1302讀取1Byte數(shù)據(jù)////////////////////////
uchar RTOutputByte(void)
{
    uchar i;
    TRISC=0x80;
    for(i=8; i>0; i--)
    {
      acc = acc >>1;         //*相當于匯編中的 RRC */
      acc7= T_IO;// CARRY
      T_CLK = 1;
      T_CLK = 0;
    }
     return(acc);
}
///////先寫地址,后寫命令/數(shù)據(jù)//////////////////////////
void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);      // /* 地址,命令 */
    RTInputByte(ucDa);        // /* 寫1Byte數(shù)據(jù)*/
    T_CLK = 1;
    T_RST = 0;
}
///////先寫地址,后讀命令/數(shù)據(jù)////////////////////////
uchar R1302(uchar ucAddr)
{
    uchar ucData;

T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);            // /* 地址,命令 */
    ucData = RTOutputByte();        // /* 讀1Byte數(shù)據(jù) */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}
/////////向1302寫入 秒 分 時 日 月 星期 年 */////////////
void Set1302(uchar *pClock)
{

  uchar i;
    uchar ucAddr = 0x80;
    W1302(0x8e,0x00);           ///* 控制命令,WP=0,允許寫操作*/
    for(i =7; i>0; i--)
    {
      W1302(ucAddr,*pClock);    ///* 秒 分 時 日 月 星期 年 */
      pClock++;
      ucAddr +=2;
    }
     W1302(0x8e,0x80);          // /* 控制命令,WP=1,寫保護*/
}
////////從1302讀出 秒 分 時 日 月 星期 年 *//////////////////
void v_Get1302(unsigned char  ucCurtime[])
{
unsigned char i;
unsigned char ucAddr = 0x81;
for (i=0;i<7;i++)
   {
      ucCurtime[i] = R1302(ucAddr);///*格式為: 秒 分 時 日 月 星期 年 */
      ucAddr += 2;
   }
}
//////////拆字子程序///////////////////////////////////////
void  bcd_bcd( )
  {  uchar   a=6;


    for (i=0;i<=15;)
     {
           appear[i]=(get1302[a]&0xf0)/16;

 i++;
           appear[i]=get1302[a]&0x0f;
           i++;
           a--;
     }
}
////////按鍵掃描///////////////////////////////////////////////////
              
//////////按鍵掃描/////////////////////////////////////////////////
void   Key()
{  
   uchar a,b,c,i;
  di();
  a=PORTA ;

 if(56!=(a&56))
   {
      display();
      a=PORTA ;
      if(56!=(a&56))
      {
        for (b=0;b<14;)
          {
                uchar  z,x;
    
                for(z=50;z>0&&b<14;z--)
                  {    z--;
                      display();// delay();
                       delay();
                       a=PORTA;
                       a=a&56;
                       switch(a)
                        {
    
                            case 48 :
                                if(Ds1302[b]!=appear[b] )
                                   (appear[b])++;
                                    a=PORTA ;
                                  for(x=20;x>0&&56!=(a&56);x--)
                                   {   display();// delay();

 delay();
                                    } break; // 年  星期  月 日   時  分 秒  
                            case 40 : if(appear[b]!=0)(appear[b])--;
                                       a=PORTA ;
                                        for(x=20;x>0&&56!=(a&56);x--)
                                        {  display();// delay();
                                              delay();
                                        } break;//  年  星期  月 日   時  分 秒    
                            case 24 :  b++;   while( PORTA_5==0);     break;
                        }
                    }
                    
                     a=PORTA ;
                   for(z=50;( z>0&&56==(a&56));z--)
                   {  
                      
                      i=appear[b];
                      appear[b]=10;
                      display( );

       delay();
                      appear[b]=i;
                      a=PORTA;
                     //a=a&56;
                     z--;
                
                    }
                  
          }
                 while( PORTA_5==0);
                  i=13;
                  c=12;
                for(b=0;b<7;b++)
                 {
                      DisCash[b]=((appear[c]&0x0f)*16)|(appear[i]&0x0f);
                       i=i-2;
                       c=c-2;
                 }
                 Set1302(&DisCash[0]);
                 a=PORTA ;
       }  
    }

//////////顯示子程序/////////////////////////////////////////////
void  display()//顯示程序
{
      y=0x80;//0x0C0;寫入起始地址
       enable();//寫入控制命令子程序
      
       for(i=0;i<8;)
       {
          y=Data[ appear[i]];    // 1';//0x47;
          W_data ();//寫入數(shù)據(jù)子程序
       // delay();
           i++;
           y=Data[ appear[i]];    // 1';//0x47;
           W_data ();//寫入數(shù)據(jù)子程序
       // delay();
           i++;
           y='-'; // 1';//0x47;
           W_data ();//寫入數(shù)據(jù)子程序
        //delay();
       }
        y=0x0C0;

 enable();//寫入控制命令子程序
        for(i=8;i<14;)
         {
             y=Data[appear[i]];    // 1';//0x47;
             W_data ();//寫入數(shù)據(jù)子程序
                //delay();
               i++;
               y=Data[appear[i]];    // 1';//0x47;
               W_data ();//寫入數(shù)據(jù)子程序
               // delay();
                i++;
                y=':';    // 1';//0x47;
                W_data ();//寫入數(shù)據(jù)子程序
                // delay();
      
          }
             y='-';    // 1';//0x47;
             W_data ();//寫入數(shù)據(jù)子程序
             // delay();

          for(i=0;i<3;i++)
               {
        
                 y=Data[ BCD[i]];    // 1';//0x47;
                 W_data ();//寫入數(shù)據(jù)子程序
                }
}
///////主程序//////////////////////////////////////////////////////
void main()

{  
    // TRISB=0x00;
    // TRISC=0x00;
         Set1302(&DisCash[0]);
        initial ();//系統(tǒng) 各I/O初始化子程序
        adinitial();//A/D轉(zhuǎn)換初始化子程序/
        y=0x01;//PORTB
        enable();//寫入控制命令子程序
        y=0x38;//8位2行5X7點陣0x3c
        enable();//寫入控制命令子程序
        y=0x0C;//顯示器開,F(xiàn)=光標開,閃爍開。
        enable();//寫入控制命令子程序
        y=0x06; //文字不動,光標自動右移。
        enable();//寫入控制命令子程序

///////////////////////////////////////////////////
   while(1)
   {
        v_Get1302(get1302);//從1302讀出 秒 分 時 日 月 星期 年
       bcd_bcd(get1302);//拆字子程序
       H_BCD ( ADRES ); //十六進制轉(zhuǎn)十進制程序
       ei();
       ADGO=1;      //啟動A/D轉(zhuǎn)換 ADCON0,
      
       display();
        Key();
    }  
}

 

(文源網(wǎng)絡(luò),侵刪)

404
返回首頁 |  返回上一頁
联系我们: 巴里| 揭西县| 宁河县| 衡东县| 顺平县| 临武县| 灵石县| 延长县| 满洲里市| 大英县| 泽普县| 临邑县| 鞍山市| 阳高县| 南丹县| 浦东新区| 鄢陵县| 那坡县| 邢台市| 云浮市| 张家港市| 安庆市| 克东县| 莱西市| 丰原市| 政和县| 瑞金市| 温宿县| 图木舒克市| 阿克陶县| 永平县| 崇礼县| 泗水县| 延安市| 石城县| 长沙市| 蒙阴县| 黄石市| 新竹市| 台江县| 大埔县|