⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 counter.c

📁 《PIC单片机C语言开发入门》所有章节源程序
💻 C
字号:

//**************************************************************/
    /*计数器实验源程序,源文件名counter.c。使用MPLAB C18
      编译器。*/
    //使用PIC18F452高性能单片机,RA1输入脉冲信号,RB口输出BCD码,
    //由LED数码管显示RB口输出的两位十进制数。
    //使用AW-2型实验板。
//**************************************************************/

/*
 *PICC编译器源程序注释也可以使用“//“符号。
*/ 

//---------------------------------------------------------------
#include <p18cxxx.h>      /* head file*/
#include <p18f452.h>      //PIC18F452 head file。
//---------------------------------------------------------------

//---------------------------------------------------------------
#define uchar unsigned char
#define uint unsigned int
//---------------------------------------------------------------

//---------------------------------------------------------------
void initPORTB();
void initPORTA();
void uinttouchar(uchar x);     //hex to BCD
uchar connectbyte(uchar y1,uchar y2);   //合并BCD字节。
void delayx1ms(uchar count);  // 声明按键延迟函数。
//---------------------------------------------------------------  

//---------------------------------------------------------------
uchar counter;            //按键计数。

uchar x1,x2;              //x1是BCD高4位,x2是BCD低4位。
//---------------------------------------------------------------

void main (void)
{
    initPORTB();
    initPORTA();
   
    counter = 0;          //设置初值。

    while (1)             //永久循环扫描键盘。
    {
       TRISA=0x00;        
       PORTAbits.RA1=0; 

       if(PORTAbits.RA1==0)     /* have key down*/
      {
         delayx1ms(10);           /*delay 10ms*/
         if(PORTAbits.RA1==0)
         {
           counter++;           /*key value memory in counter*/
           
           TRISA=0x00;        
           PORTAbits.RA1=1;

           while(1)    
           { 
             if(PORTAbits.RA1==1)    //按键松开否?    
             delayx1ms(10);            //延迟10ms。
             
             if(PORTAbits.RA1==1)    //按键松开。
                break;               //退出。      
           }
           
           uinttouchar(counter);     //hex to decimal       
           PORTB=connectbyte(x1,x2); //connect bcd high 4 bit and low 4 bit 

          }
      }

    }
}

//*************************************************************************
// inicial PORTB.
//*************************************************************************
void initPORTB()
{
    TRISB = 0x00;         //设置B口为输出。
    INTCON=0x00;          //关闭所有中断。
    PORTB=0x00;           //清B口。
}

//*************************************************************************
// delay 1ms*count subprogram.
//*************************************************************************
void initPORTA()
{
    PORTA=0x00;           //清A口。          
    ADCON1=0x07;          //设置A口为开关量I/O使用。
    TRISA=0xff;           //设置A口为输入。
    //PORTA=0xff;
}

//*************************************************************************
// delay 1ms*count subprogram.
//*************************************************************************
void delayx1ms(uchar count)
{
     uchar i,j;
     for(i=0;i<count;i++)      //count is delay sum
         for(j=0;j<130;j++)
           ;
}

//*************************************************************************
//    uint hex change into decimai.
//*************************************************************************
void uinttouchar(uchar x)
{
     uchar mid,y;

     mid=x;
     y=x;
     x2=(uchar)(y%10);

     y=mid;
     x1=(uchar)(((y-x2)%100)/10);
}

//*************************************************************************
//    合并字节.
//*************************************************************************
uchar connectbyte(uchar y1,uchar y2)
{
     return(((0xf0)&(y1<<4))|((0x0f)&y2));
}






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -