|
1:BIN TO BCD
(我认为我这个是很好的了;即小又快!用在有时钟显示的地方)
/*******************************************************************
公司名称:
模块名称:BCD.c
功 能:BCD模块//仅适用于两位数
说 明:count选1则返回个位数;为2则返回十位数;display_buf为送显的数
程序设计:FANZENGTING
设计时间:2001.06.02
版 本 号: 20010602
*******************************************************************/
/////////////////////////////////////////////
unsigned char bcd(unsigned char count,unsigned char display_buf)
{
unsigned char one_count=0;
unsigned char two_count=0;
unsigned char bus_count=0;
for(;display_buf!=bus_count;)
{
bus_count++;
one_count++;
if(one_count==10)
{
one_count=0;
two_count++;
}
}
if(count==1)
{
return(one_count);
}
else
{
return(two_count);
}
}
/*******************************************************************/
2:BUZZER驱动
/*******************************************************************
公司名称:
模块名称:BUZZER.c
功 能:蜂鸣器模块驱动
说 明:用PWM输出来驱动无源蜂鸣器
程序设计:FANZENGTING
设计时间:2001.06.02
版 本 号: 20010602
*******************************************************************/
/*******************************************************************
buzzer_count=1;buzzer_leng=60000;(一声短)
buzzer_count=2;buzzer_leng=60000;(两声短)
buzzer_count=1;buzzer_leng=120000;(一声长)
/*******************************************************************/
void buzzer_task( buzzer_count,buzzer_leng)/*蜂鸣器;*/
unsigned char buzzer_count;
unsigned int buzzer_leng;
{
unsigned int count;
for(;buzzer_count;)
{
CCPR1L=0X7F;
CCP1CON=0X3C;
PR2=0Xf9;//(4khz);f=1/(pr2+1*4]*T*t2
T2CON=0X04;
count=buzzer_leng;
for(;count;)
{
count--;
}
buzzer_count--;
}
CCP1CON=0;
RC2=0;
}
/*********************************************************************/
再来个BIBI叫的
/*******************************************************************
公司名称:
模块名称:BUZZER.c
功 能:蜂鸣器模块驱动2
说 明:16CX无源4M晶振,4KHz;200ms输出;分频比1:256;
程序设计:FANZENGTING
设计时间:2001.06.02
版 本 号: 20010602
*******************************************************************/
#define BUZZER_OUT RB0
#define BUZZER_IO TRISB0
void buzzer(void)
{
unsigned int buzzercount=0;
BUZZER_IO=0;
RTCC=0;
for(;buzzercount<800;)
{
CLRWDT( );
if(RTCC==1)
{
BUZZER_OUT=BUZZER_OUT^1;
RTCC=0;
}
buzzercount++;
}
BUZZER_OUT=0;
}
/********************************************************************/
164
/*******************************************************************
公司名称:
模块名称:164.c
功 能:74ls164移位寄存器驱动
说 明:
程序设计:FANZENGTING
设计时间:2001.06.02
版 本 号: 20010602
*******************************************************************/
#define SDA_164 RC4/*数据线*/
#define SCL_164 RC3/*时钟线*/
/********************************************/
send_164(unsigned char k )
{
unsigned char i;
for(i=1; i<=8; i++)
{
SCL_164=0;
if(k>=128)
{
SDA_164=1;
}
else
{
SDA_164=0;
}
SCL_164=1;
k=k<<1;
}
}
/********************************************/
a/d转换用做按键的
/*******************************************************************
公司名称:
模块名称:ad_key.c
功 能:用a/d转换的按键模块
说 明: 上拉电阻为1k;5个按键分别为10k;4.7k;2k;1k;330欧
程序设计:FANZENGTING
设计时间:2001.06.02
版 本 号: 20010602
*******************************************************************/
bit key_bit;/*按键状态标志*/
/************************************************************************/
key(ADCON0_value,ADCON1_value )//按键
unsigned char ADCON0_value;/*用来设定a/d通道及功能*/
unsigned char ADCON1_value;/*用来设a/d转换引脚功能*/
{
unsigned char key_value;/*键值*/
unsigned char ad_temp[5];
unsigned char loop;
for(loop=1;loop<6;loop++)
{
ADCON1=ADCON1_value;
ADCON0=ADCON0_value;
#asm
nop;
nop;
nop;
nop;
#endasm
ADGO=1;
for(;ADGO==1;)
{
#asm
nop;
#endasm
CLRWDT( );
}
ad_temp[loop]=ADRES;
}
key_value=(ad_temp[1]+ad_temp[2]+ad_temp[3]+ad_temp[4]+ad_temp[5])/5;
if(key_value>=0xf0)
{
key_bit=0;/*无按键按下*/
return;
}
if(key_bit==0)
{
key_bit=1;/*有按键按下*/
if(key_value>=0xdd)/*10k欧电阻对应按键处理*/
{
return;
}
/************************************************************************/
if(key_value>=0xc0)/*4.7k欧电阻对应按键处理*/
{
return;
}
/************************************************************************/
if(key_value>=0x90)/*2k欧电阻对应按键处理*/
{
return;
}
/************************************************************************/
if(key_value>=0x70)/*1k欧电阻对应按键处理*/
{
return;
}
/************************************************************************/
if(key_value>=0x38)/*330欧电阻对应按键处理*/
{
return;
}
}
}
/*************************************************************************/
|
| |
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|