×
单片机 > 单片机程序设计 > 详情

PIC16C74单片机显示程序

发布时间:2020-06-08 发布时间:
|

PIC16C74单片机显示程序

/******************************************* 
************PIC16C74单片机控制************** 
********************************************/ 
#include                   //

#include                 // 
#include                  // 
#define uchar unsigned char       // 
#define uint unsigned int         // 
//--------------------------------------- 
#define BIAS 0X50                 //1/2偏压,4背极 
#define RC256 0X30                //系统时钟选择为片内RC振荡器 
#define WDTDIS1 0X0A              //禁止WDT溢出标志输出 
#define TIMERDIS 0X08             //时基输出禁能 
#define SYSEN 0X02                //打开系统时钟 
#define LCDON 0X06                //打开偏压发生器 
#define SYSDIS 0X00               //关闭系统时钟和偏压发生器 

#define KEY_UP RB7                // 
#define KEY_DOWN RB6              // 
#define KEY_SET RB5               // 
//-------------------------------------- 
//static unsigned char KeyV,TempKeyV; //键值 
unsigned char buf0,buf1,buf2,buf3,buff; // 
unsigned char buf[4];                 // 
unsigned char k,data,sreg,disppoint;  // 
unsigned int  i;                      // 
const table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}; // 
//********************************* 
/*延时函数*/ 
//********************************* 
void delay_10ms()                // 
{ uint j;                        // 
    for(j=0;j<1000;j++)          // 
    {;}                          // 
}                                // 
//********************************* 
void delay_1ms()                 // 
{ uint j;                        // 
    for(j=0;j<100;j++)           // 
    {;}                          // 
}                                // 
//********************************** 
void delay1s()                   //延时1S 

 uchar i;                        // 
 uint j;                         // 
 for(i=0;i<10;i++)               // 
    for(j=0;j<1300;j++);         // 
}                                // 
//********************************** 
//按键等待程序 
//********************************** 
void keywait()                   // 

   while((PORTB & 0xF0)!=0xF0)   // 
   {;}                           // 
}                                // 
//******************************** 


//******************************** 
void buf_initial()     // 

   buf0=0x00;          // 
   buf[0]=buf0;        // 
   buf1=0x00;          // 
   buf[1]=buf1;        // 
   buf2=0x00;          // 
   buf[2]=buf2;        // 
   buf3=0x00;          // 
   buf[3]=buf3;        // 
   sreg=0x00;          // 
}                      // 
//********************************** 
void put_num(char c) 

  PORTC=table[c&0x0f]; // 

//********************************** 
void display()         // 

  disppoint=0;         // 
  put_num(buf[disppoint]); // 
  RC0=0;               // 
  delay_1ms();         // 
  RC0=1;               // 
   
  disppoint++;         // 
  put_num(buf[disppoint]); // 
  RC1=0;               // 
  delay_1ms();         // 
  RC1=1;               // 
   
  disppoint++;         // 
  put_num(buf[disppoint]); // 
  RC2=0;               // 
  delay_1ms();         // 
  RC2=1;               // 
   
  disppoint++;         // 
  put_num(buf[disppoint]); // 
  RC3=0;               // 
  delay_1ms();         // 
  RC3=1;               // 


//********************************** 
//AD转换初始化子程序   // 
//********************************* 
void ad_initial()      // 

   ADCON0=0B01001001;  //fosc/8 RA1/AN1 ADON=1 
   ADCON1=0B00000010;  //AN0-AN4=A VREF=VDD 
   ADIE=1;             // 
   PEIE=1;             // 

//********************************** 
//按键处理子程序       // 
//********************************** 
void keywork()               // 

  if((PORTB&0xFF)!=0xFF)     //如果P1.2--P1.4不为全1,可能有键按下 
   { 
     delay_10ms();           //延时去抖动 
     if((PORTB&0xFF)!=0xFF)  //重读P1.2-P1.4位,若还是不全为1,定有键按下 
       { 
         if((PORTB&0xF0)!=0xF0)   //重读P1.2-P1.4位,若还是不全为1,定有键按下 
          { 
//------------------------------------------- 
            if (KEY_SET==0)       //按下SET键,如在SET状态就退出,否则进入 
               { 
                  RC4=!RC4; 
                  keywait(); 
                  return; 
                } 
               else if(KEY_DOWN==0)    //按下DOWN键 
                  { 
                   RC3=!RC3; 
                   keywait(); 
                   return; 
                   } 
                 else if (KEY_UP==0)   //按下UP键 
                   { 
                     RC2=!RC2; 
                     keywait(); 
                     return; 
                   } 

                } 
           } 
      } 


//-------------------------------------- 



//-------------------------------------- 
//Tmr0中断程序 
void interrupt clkint(void) 

  TMR0=0x13;        // 
  T0IF=0;           // 
  CLRWDT();         // 
  sreg=sreg+1;      // 
  if(sreg==40)      // 
  {                          // 
     sreg=0;                 // 
    buf[3]++; 
    if(buf[3]>9) 
        {buf[3]=0; 
        buf[2]++; 
        if(buf[2]>9) 
            {buf[2]=0; 
            buf[1]++; 
            if(buf[1]>9) 
                {buf[1]=0; 
                buf[0]++; 
                if(buf[0]>9)buf[0]=0; 
                } 
                        } 
               } 
       } 

/*******************************主函数******************************/ 
main()                                   //主函数 

  OPTION=0B00000000;  // 
  STATUS=0X00;        // 
  ADCON1=0B00000000;  // 
  INTCON=0X00;        // 
  PIE1  =0B00000000;  // 
  PIR1  =0X00;        // 
  T1CON =0B00000000;  // 

  T0CS=0;        // 
  PSA=1;         // 
  T0IF=0;        // 
  T0IE=1;        // 

  TRISB=0XFF;    // 
  TRISC=0X00;    // 
  PORTB=0XFF;    // 
  PORTC=0X00;    // 
  buf_initial();  // 
  while(1)       // 
  { 
   keywork();    // 
  } 





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容