winnie 发表于 2009-3-31 15:04:59

一组实用的PICC应用模块

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_OUTRB0
#define BUZZER_IOTRISB0
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 )//按键
unsignedchar ADCON0_value;/*用来设定a/d通道及功能*/
unsignedchar ADCON1_value;/*用来设a/d转换引脚功能*/
{
unsignedchar key_value;/*键值*/
unsigned char ad_temp;
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=ADRES;
}
      key_value=(ad_temp+ad_temp+ad_temp+ad_temp+ad_temp)/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;
}
      }
}
/*************************************************************************/




页: [1]
查看完整版本: 一组实用的PICC应用模块