PIC16C74单片机显示程序
扫描二维码
随时随地手机看文章
PIC16C74单片机显示程序
/*******************************************
************PIC16C74单片机控制**************
********************************************/
#include
#include
#include
#defineucharunsignedchar//
#defineuintunsignedint//
//---------------------------------------
#defineBIAS0X50//1/2偏压,4背极
#defineRC2560X30//系统时钟选择为片内RC振荡器
#defineWDTDIS10X0A//禁止WDT溢出标志输出
#defineTIMERDIS0X08//时基输出禁能
#defineSYSEN0X02//打开系统时钟
#defineLCDON0X06//打开偏压发生器
#defineSYSDIS0X00//关闭系统时钟和偏压发生器
#defineKEY_UPRB7//
#defineKEY_DOWNRB6//
#defineKEY_SETRB5//
//--------------------------------------
//staticunsignedcharKeyV,TempKeyV;//键值
unsignedcharbuf0,buf1,buf2,buf3,buff;//
unsignedcharbuf[4];//
unsignedchark,data,sreg,disppoint;//
unsignedinti;//
consttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//
//*********************************
/*延时函数*/
//*********************************
voiddelay_10ms()//
{uintj;//
for(j=0;j<1000;j++)//
{;}//
}//
//*********************************
voiddelay_1ms()//
{uintj;//
for(j=0;j<100;j++)//
{;}//
}//
//**********************************
voiddelay1s()//延时1S
{
uchari;//
uintj;//
for(i=0;i<10;i++)//
for(j=0;j<1300;j++);//
}//
//**********************************
//按键等待程序
//**********************************
voidkeywait()//
{
while((PORTB&0xF0)!=0xF0)//
{;}//
}//
//********************************
//********************************
voidbuf_initial()//
{
buf0=0x00;//
buf[0]=buf0;//
buf1=0x00;//
buf[1]=buf1;//
buf2=0x00;//
buf[2]=buf2;//
buf3=0x00;//
buf[3]=buf3;//
sreg=0x00;//
}//
//**********************************
voidput_num(charc)
{
PORTC=table[c&0x0f];//
}
//**********************************
voiddisplay()//
{
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转换初始化子程序//
//*********************************
voidad_initial()//
{
ADCON0=0B01001001;//fosc/8RA1/AN1ADON=1
ADCON1=0B00000010;//AN0-AN4=AVREF=VDD
ADIE=1;//
PEIE=1;//
}
//**********************************
//按键处理子程序//
//**********************************
voidkeywork()//
{
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;
}
elseif(KEY_DOWN==0)//按下DOWN键
{
RC3=!RC3;
keywait();
return;
}
elseif(KEY_UP==0)//按下UP键
{
RC2=!RC2;
keywait();
return;
}
}
}
}
}
//--------------------------------------
//--------------------------------------
//Tmr0中断程序
voidinterruptclkint(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();//
}
}