在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → usb示例代码(pic16f690)

usb示例代码(pic16f690)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:7.59KB
  • 下载次数:11
  • 浏览次数:61
  • 发布时间:2021-08-07
  • 实例类别:嵌入式开发
  • 发 布 人:qwer1415926
  • 文件格式:.c
  • 所需积分:2
 相关标签: test usb ST sb ES

实例介绍

【实例简介】#include <pic.h>//绿屏版SHIYAN
__CONFIG(0X3BE4);
//关闭看门狗,选择高速晶振,上电延时复位,掉电复位使能,代码保护
//#include "tab1.h"
#include "tab2.h"
#include "dianzhen12864.h"
#include "AD.h"
unsigned char ReadEE(unsigned char addr);
void WriteEE(unsigned char addr,unsigned char data);        //写EEPROM
void get_AD();

uchar hour=0; //时分秒
uchar min=0;  
uchar sec=0;
uint mah;//容量 mah表示
uint mahYS;//容量 mah表示
uchar valL;
uchar valH;
unsigned long int mas=0;//ma秒,3600mas=1mah
bit GL=0;

#define  YX      RA2
#define  SET      RB4
#define  CC     RB5//CC
#define  BG    RA5
uchar ad1,ad2,ad3,ad4;
 uchar i1,i2,i3,i4,i5,i6,i7;
void delay(uint x);

void init();  

void timer1_init();
 uchar counter=0;//计数器


void timer1_init()
{
GIE=1;
PEIE=1;
PIE1=1;
T1CON=0B00110101;
// T1CKPS0=1;T1CKPS1=1; //1:8
// TMR1CS=0;
   TMR1IE=1;
TMR1ON=1;
TMR1H=0xfb;
TMR1L=0x1e;
 
}
/***************************/

//如果充电电流小于10ma,则认为充电停止





/*****************************/
   void interrupt ISR(void)
  {
 
if(TMR1IF==1)
{

TMR1IF=0;
TMR1H=0xfb;
TMR1L=0x1e;
if( counter>=99)
    {
counter=0;
YX=~YX;
GL=1;

}
}
}


/**********main***********/
void main()
{



delay(100); 
   init();
delay(100); 
InitLCD();
delay(100); 
    clear_screen();
/*
DisplayString1608(1, 20,"-" );
DisplayString1608(5, 28,"U" );
DisplayString1608(5, 36,"S" );
DisplayString1608(5, 44,"B" );
DisplayString1608(5, 52,"t" );
DisplayString1608(5, 60,"e" );
DisplayString1608(5, 68,"s" );
DisplayString1608(5, 76,"t" );
//DisplayString1608(1, 84,"-" );
*/



timer1_init();    
YX=0;
delay(10);
YX=1;
delay(1000);

  YX=0;

delay(100); 
valL=ReadEE(0x02);
delay(10);
valH=ReadEE(0x03);
delay(10);
mah=valL valH*256;
delay(10);
mahYS=mah;
sec=ReadEE(0x04);
delay(10);
  min=ReadEE(0x05);
delay(10);
hour=ReadEE(0x06);
delay(10);
DisplayString1608(7, 36,"V" );
DisplayString1608(7, 96,"m" );
DisplayString1608(7, 104,"A" );
DisplayString1608(7, 112,"h" );
DisplayString1608(1, 36,"A" );
DisplayString1608(1, 104,"W" );
DisplayString1608(1, 112,"h" );
   while(1)
  {


get_AD();
i1=hour/100;
i2=hour%100/10;
i3=hour%10;
i4=min/10;
i5=min%10;
i6=sec/10;
i7=sec%10 ;
WriteEE(0x04,sec);
WriteEE(0x05,min);
WriteEE(0x06,hour);
DisplayNumber1608(3, 0,i1);
DisplayNumber1608(3, 8,i2 );
DisplayNumber1608(3, 16,i3 );
DisplayString1608(3, 24,":");
DisplayNumber1608(3, 28,i4 );
DisplayNumber1608(3, 36,i5 );
DisplayString1608(3, 44,":" );
DisplayNumber1608(3, 48,i6 );
DisplayNumber1608(3, 56,i7 );


if((SET==0)&&(CC==1))
{
delay(600);
if(SET==0)
{BG=~BG;}
}

}

}
/*************************************/
void delay(unsigned int x)
 {
 uchar a,b;
 for(a=x;a>0;a--)
      for(b=110;b>0;b--);
  } 
 
void init()
{
ANSEL=0X30; //AN4-5
ANSELH=0X00; //AN10-AN11
delay(10);
TRISB=0x30;
PORTB=0XFF;
TRISA=0x00;
PORTA=0x00;
delay(10);
TRISC=0x03;
PORTC=0x00;
ADCInit(); 





void get_AD()
{
static float temp;
uint wh;
uint temp2;
uint k,j;
uchar t1,t2,t3,t4,t5;
k=ADCAve(AN4,100);
delay(10);
  
temp=k*0.0195;

//ad4=(int)temp/10; //暂存A/D转换结果
ad1=(int)temp; //个位
ad2=((int)(temp*10)-ad1*10) ; //小数点第一位
ad3=((int)(temp*100)-ad1*100-ad2*10); //小数点第二位



if(ad1>=10)

  {DisplayNumber1608(7, 0, 1);}
else{DisplayNumber1608(7, 0, 0);}
// delay(10);
DisplayNumber1608(7, 8, ad1);
//delay(100);
DisplayString1608(7,16,".");
DisplayNumber1608(7, 20,ad2 );

DisplayNumber1608(7,28,ad3 );
 

delay(50);
j=ADCAve(AN5,120);
delay(30);
//temp=j*0.018;
temp2=(j*13);
temp2=temp2-26; //暂存A/D转换结果
ad1=temp2/1000; //个位
ad2=temp2%1000/100; //小数点第一位
    ad3=temp2%100/10; //小数点第二位
ad4=temp2%10; //小数点第三位
/**************************/
if(SET==0)
{
delay(300);
if(CC==0)
{ mah=0;
mahYS=0;
}
delay(800);
if(CC==0)
{
sec=0;
min=0;
hour=0;
mas=0;
}


}
if(CC==0)
{
delay(1000);
if(CC==0)
{wh=0;}
}



valL=mah%256;
valH=mah/256;
//mah=mahYS;
WriteEE(0x02,valL);
delay(1);
WriteEE(0x03,valH);

/****************************/
if(temp2>30)
{
if(GL==1)
{


GL=0;
mas =temp2;
mah=mas/3600;
delay(1);
wh=(temp*mah);
delay(1);
mah =mahYS;
// mahYS=0;


sec ;

if(sec==60)
{
sec=0;
min ;

if(min==60)
{
min=0;
hour ;

}


}
}
}


/*

// mahYS=0;
valL=mah%256;
valH=mah/256;
//mah=mahYS;
WriteEE(0x02,valL);
delay(1);
WriteEE(0x03,valH);
delay(1);
*/

t5=mah/10000; 
t4=mah%10000/1000; 
t3=mah%1000/100; 
t2=mah%100/10 ;
t1=mah%10;

DisplayNumber1608(7, 56,t5);
DisplayNumber1608(7, 64,t4 );
DisplayNumber1608(7, 72,t3 );
DisplayNumber1608(7, 80,t2);
DisplayNumber1608(7, 88,t1 );
/******************Wh**********************/

//wh=temp*mah;
t5=wh/10000; 
t4=wh%10000/1000; 
t3=wh%1000/100; 
t2=wh%100/10 ;
//t1=wh%10;

DisplayNumber1608(1, 64,t5 );
DisplayNumber1608(1, 72,t4 );
DisplayString1608(1,80,".");
DisplayNumber1608(1, 84,t3);
DisplayNumber1608(1, 92,t2 );
//DisplayNumber1608(1, 96,t1);
/************************************************/
// DisplayString1608(5, 0, "0");
DisplayNumber1608(1, 0, ad1);
delay(10);
DisplayString1608(1,8,".");
DisplayNumber1608(1, 12, ad2);


DisplayNumber1608(1, 20,ad3 );

DisplayNumber1608(1,28,ad4 );
//delay(100);
// delay(10);







}

//读EEPROM
unsigned char ReadEE(unsigned char addr)                //读EEPROM
  {
    unsigned char num;
  while(RD==1);                        //上一次读操作是否完成
    EEADR=addr;  //0x01                  //EEPROM地址为00H
    EEPGD=0;                             //指向EEPROM数据储存器
    RD=1;  
do{;}                              //开始读
    while(RD==1);                        //等待读操作完成
    num=EEDATA; 
                        //读出
    return(num);                         //返回读出的数
  }
//写EEPROM
void WriteEE(unsigned char addr,unsigned char data)        //写EEPROM
  {

while(WR==1);                         //上一次写操作是否完成
   EEADR=addr;//0X02                     //EEPROM地址
   EEDATA=data; //0X05                   //准备写入EEPROM的数据
   EEPGD=0;                              //指向EEPROM数据储存器
   WREN=1;                               //使能写操作
   GIE=0;                                //禁止中断                              
   EECON2=0x55;                          //设置通用参数
   EECON2=0xAA;                          //设置通用参数
   WR=1;
   GIE=1;
do{;}                                //开始写
   while(WR==1);                         //等待写操作完成
   if(EEIF==1)
     {
       EEIF=0;
     }                    
   WREN=0;                               //禁止写操作

  }










【实例截图】
【核心代码】

标签: test usb ST sb ES

实例下载地址

usb示例代码(pic16f690)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警