为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)

2012-08-25 13页 doc 2MB 74阅读

用户头像

is_381905

暂无简介

举报
FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)/****************************************************************/ 程序功能简介:本程序产生15HZ~~~50KHZ的方波,并且实现频率和脉宽的独立调制,即可在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置两个调节步长------在KEY键按下时,粗调,没有按下时,细调;程序思路:本程序用到两个定时器------定时器0和定时器1,其中定时器0工作在定时方式下,决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽; /*******...
FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)
/****************************************************************/ 程序功能简介:本程序产生15HZ~~~50KHZ的方波,并且实现频率和脉宽的独立调制,即可在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置两个调节步长------在KEY键按下时,粗调,没有按下时,细调;程序思路:本程序用到两个定时器------定时器0和定时器1,其中定时器0工作在定时方式下,决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽; /****************************************************************/ #include "reg52.h" #include "math.h" #define uchar unsigned char #define uint unsigned int #define ALL 65536 //定时器工作方式1时,最大基数长度65536; #define F_osc 12000000 //晶振频率12M; /*各端口定义*/ sbit KEY_F_UP=P0^2; //频率上调按钮; sbit KEY_F_DOWN=P0^3; //频率下调按钮; sbit KEY_W_UP=P0^4; //脉宽上调按钮; sbit KEY_W_DOWN=P0^5; //脉宽下调按钮; sbit KEY=P0^6; //粗细调节按钮-----按下为粗调,否则为细调; sbit OUTPUT=P1^0; //波形输出; /*全局变量声明;*/ uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L; //定时器0和定时器1的初值设置; uchar PERCENT=50; //初始占空比; uchar FLAG_F=0,FLAG_W=0; //频率调节标志和脉宽调制标志; uint FREQ=1000; //初始频率; float temp; //临时全局变量,用于数据传递; /*函数声明;*/ void delay(uchar t); //延时函数,用于按键去抖; void init(); //初始化函数,用于定时器的初始化; void calculate_F(); //频率计算函数,当频率变化,计算出定时器0初值; void calculate_W(); //脉宽计算函数,脉宽变化时,计算出定时器1初值; void key_scan(); //按键扫描函数; void timer0(); //定时器0中断函数; void timer1(); //定时器1中断函数; /***************************************/ //函数名称:delay(); //入口参数:uchar t; //出口参数:无; //函数功能:延时; /***************************************/ void delay(uchar t) { uchar i,j; while(t--) { for(i=0;i<100;i++) for(j=0;j<100;j++) ; } } /****************************************************************/ //函数名称:calculate_F(); //入口参数:无; //出口参数:无; //函数功能:频率计算函数,当频率变化,计算出定时器0初值; /****************************************************************/ void calculate_F() { temp=ALL-F_osc/12.0/FREQ; TIMER0_H=(uint)temp/256; TIMER0_L=(uint)temp%256; /****************************************************************/ //函数名称:calculate_W(); //入口参数:无; //出口参数:无; //函数功能:脉宽计算函数,脉宽变化时,计算出定时器1初值; /****************************************************************/ void calculate_W() { float TEMP; TEMP=(1-PERCENT/100.0)*ALL+temp*PERCENT/100.0; TIMER1_H=(uint)TEMP/256; TIMER1_L=(uint)TEMP%256; } /**********************************/ //函数名称:key_scan(); //入口参数:无; //出口参数:无; //函数功能:按键扫描函数; /*********************************/ void key_scan() delay(4); if(!KEY_F_UP) //频率上调键按下; { FLAG_F=1; //置标志位; if(!KEY) FREQ+=10; else FREQ++; if(FREQ>50000) FREQ=1; } else if(!KEY_F_DOWN) //频率下调键按下; { FLAG_F=1; //置标志位; if(!KEY) FREQ-=10; else FREQ--; if(FREQ<1) FREQ=50000; } else if(!KEY_W_UP) //脉宽上调键按下; { FLAG_W=1; //置标志位; if(!KEY) PERCENT+=5; else PERCENT++; if(PERCENT>99) PERCENT=1; } else if(!KEY_W_DOWN) //脉宽下调键按下; { FLAG_W=1; //置标志位; if(!KEY) PERCENT-=5; else PERCENT--; if(PERCENT<1) PERCENT=99; } else ; } /*************************************/ //函数名称 timer0(); //入口参数:无; //出口参数:无; //函数功能:定时器0中断函数; /***********************************/ void timer0() interrupt 1 { TH0=TIMER0_H; TL0=TIMER0_L; TR1=1; //开定时器1; OUTPUT=1; } /************************************/ //函数名称 timer1(); //入口参数:无; //出口参数:无; //函数功能:定时器1中断函数; /***********************************/ void timer1() interrupt 3 { TH1=TIMER1_H; TL1=TIMER1_L; TR1=0;//关定时器1,一定要这一步,因为定时器1的定时短于定时器0; OUTPUT=0; } /***********************************************/ //函数名称 init(); //入口参数:无; //出口参数:无; //函数功能:定时器初始化函数; /**********************************************/ void init() { TMOD=0x11; //定时器0和定时器1都工作在方式1,16位计数器; calculate_F(); //初始为1KHZ,占空比为50%; calculate_W(); TH0=TIMER0_H; TL0=TIMER0_L; TH1=TIMER1_H; TL1=TIMER1_L; ET0=1; ET1=1; EA=1; TR0=1; TR1=1; } /*************************************************/ //函数名称 main(); //入口参数:无; //出口参数:无; //函数功能:主函数入口; /************************************************/ main() { init(); while(1) { key_scan(); if(FLAG_F) //改变频率时要注意要进行脉宽的重新设置; { calculate_F(); calculate_W(); FLAG_F=0; } if(FLAG_W) // 脉宽改变,频率不改变; { calculate_W(); FLAG_W=0; } } }
/
本文档为【FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索