資源簡介
給51寫的單片機AD采樣后在0.96 OLED屏幕上進行波形顯示的程序

代碼片段和文件信息
//****************OLED微型示波器**********************//
//*****************迷夢數碼科技***********************//
//**********http://shop108196262.taobao.com***********//
//**********程序編寫:7426笨蛋************************//
//**********編寫日期:2014年11月***********************//
#include//STC12C5A60S2頭文件,沒有用到相關寄存器可以用reg51.h代替
#include
#define?FOSC????30000000L
#define?ADC_POWER???0x80????????????//ADC?power?control?bit
#define?ADC_FLAG????0x10????????????//ADC?complete?flag
#define?ADC_START???0x08????????????//ADC?start?control?bit
#define?ADC_SPEEDLL?0x00????????????//420?clocks
#define?ADC_SPEEDL??0x20????????????//280?clocks
#define?ADC_SPEEDH??0x40????????????//140?clocks
#define?ADC_SPEEDHH?0x60????????????//70?clocks
sbit?test=P3^1;
void?LCD_P16x16Str(unsigned?char?xunsigned?char?yunsigned?char?ch[]);
extern?unsigned?char?code?logo_bmp[];
extern?unsigned?char?code?coordinate_bmp[];
unsigned?int?newtimeoldtimelengthfreq;
void?delay(int?ms)?//延時程序
{
???int?iijj;
???if?(ms<1)?ms=1;
???for(ii=0;ii ???for(jj=0;jj<500;jj++);??
???????
}?
void?InitADC()
{
????P1ASF?=?0x01;???????????????????//選擇P1^0作為AD輸入口
????ADC_RES?=?0;????????????????????//清除轉換結果
????ADC_CONTR?=?ADC_POWER?|?ADC_SPEEDLL?|?ADC_START?|?0;
????delay(2);???????????????????????//ADC?power-on?delay?and?Start?A/D?conversion
}
void?Int_PCA()
{
????CCON?=?0;???????????????????????//初始化PCA控制寄存器
????????????????????????????????????//PCA定時器停止
????????????????????????????????????//清除CF標志
????????????????????????????????????//清除模塊中斷標志
????CL?=?0;?????????????????????????//復位PCA寄存器
????CH?=?0;
????CCAP0L?=?0;
????CCAP0H?=?0;
????CMOD?=?0x01;????????????????????//設置PCA時鐘源為系統時鐘/12且使能PCA計時溢出中斷
????CCAPM0?=?0x21;??????????????????//PCA模塊0為16位捕獲模式(上升沿捕獲可測從高電平開始的整個周期)且產生捕獲中斷
//??CCAPM0?=?0x11;??????????????????//PCA模塊0為16位捕獲模式(下降沿捕獲可測從低電平開始的整個周期)且產生捕獲中斷
//??CCAPM0?=?0x31;??????????????????//PCA模塊0為16位捕獲模式(上升沿/下降沿捕獲可測高電平或者低電平寬度)且產生捕獲中斷
}
void?PCA_isr()?interrupt?7?using?1
{
????if?(CCF0)
????{
????????CCF0?=?0;
????????if?(CF?&&?((CCAP0H?&?0x80)?==?0))
????????{
????????????CF?=?0;
????????}
????????oldtime?=?newtime;????????????//備份上一次的捕獲值
????????((unsigned?char?*)&newtime)[1]?=?CCAP0L;??//保存本次的捕獲值
????????((unsigned?char?*)&newtime)[0]?=?CCAP0H;
????????length?=?newtime?-?oldtime;???//計算兩次捕獲的差值即得到時間長度
freq=FOSC/12/length+1;
????}
????if?(CF)
????{
????????CF?=?0;???????
????}
}
void?main(void)?
{??
??char?itemtemx=8temy;
??float?voltage_maxvoltage_minvpp;
??LCD_Init();?//OLED初始化
??Draw_BMP(2601055logo_bmp);//顯示圖片
??LCD_P16x16Str(186“迷夢數碼科技“);//16x16顯示字符串
??delay(1000);?
??LCD_Fill(0x00);
??delay(500);?
??Draw_BMP(001287coordinate_bmp);
??LCD_P6x8Str(80“Vpp=“);
??LCD_P6x8Str(660“Freq=“);
?//?LCD_P3x5Str(875);
??InitADC();
??Int_PCA();
??CR?=?1;?????????????????????????//PCA定時器開始工作
??EA?=?1;
??newtime?=?0;
??oldtime?=?0;
??for(;;)?
??{
??????while(1)
??????{???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????12805??2014-11-29?13:01??stc.h
?????文件???????4022??2014-12-13?18:12??main.c
?????文件???????7032??2014-12-13?18:22??main.LST
?????文件??????14721??2014-12-13?18:22??main.OBJ
?????文件??????49386??2014-12-13?18:22??OLED
?????文件??????34359??2014-12-13?18:21??oled.c
?????文件???????1408??2014-11-30?17:24??oled.h
?????文件??????28790??2014-12-13?18:22??OLED.hex
?????文件?????????53??2014-12-13?18:22??OLED.lnp
?????文件??????48846??2014-12-13?18:22??oled.LST
?????文件??????50060??2014-12-13?18:22??OLED.M51
?????文件??????41891??2014-12-13?18:22??oled.OBJ
?????文件???????8373??2014-12-13?18:25??OLED.plg
????.......?????57505??2014-12-13?18:24??OLED.uvopt
?????文件??????13381??2014-11-06?19:54??OLED.uvproj
????.......?????57503??2014-12-11?16:47??OLED_uvopt.bak
?????文件??????????0??2014-11-06?16:58??OLED_uvproj.bak
-----------?---------??----------?-----??----
???????????????430135????????????????????17
評論
共有 條評論