英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 一组实用的PICC应用模块 [打印本页]

作者: winnie    时间: 2009-3-31 15:04
标题: 一组实用的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_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;
  }
        }
}
/*************************************************************************/
[attach]707[/attach]





欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2