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(); //
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』