📄 counter.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 + -