實現6位頻率計,防止數據溢出,并對頻率進行三分頻
標簽: 頻率計
上傳時間: 2017-07-02
上傳用戶:Divine
實現任意長的2個整數相加 但是有個BUG,就是當最高位溢出時,就缺少最高位的1
上傳時間: 2013-12-10
上傳用戶:924484786
一個深度為32,字長為8_bit FIFO(先進先出)寄存器,有寄存器空、寄存器滿和寄存器溢出信號。
標簽:
上傳時間: 2014-01-06
上傳用戶:徐孺
由8031內部定時器1,按方式1工作,即作為16位定時器使用 每0.05秒鐘T1溢出中斷一次。P1口的P1.0-P1.7分別接八個發 光二極管。要求編寫程序模擬一時序控制裝置。開機后第一 秒鐘L1,L3亮,第二秒鐘L2,L4亮,第三秒鐘L5,L7亮,第四 秒鐘L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒鐘L2,L4, L6,L8亮,第七秒鐘八個二極管全亮,第八秒鐘全滅,以后又 從頭開始,L1,L3亮,然后L2,L4亮......一直循環下去。
上傳時間: 2013-12-20
上傳用戶:hullow
微機原理與接口知識點總結: 1.緒論:計算機系統組成;馮諾依曼體系結構;進制之間的轉換;數的原碼、反碼、補碼表示;補碼加減法運算;溢出判斷 2.通用計算機工作原理:指令格式;存儲器模型;程序如何自動執行 3.CPU工作原理:CPU的基本構成(運算器、控制器、寄存器),各個部分的功能;CPU的工作原理;CPU的具體實例8086內部結構;8086的地址構成(邏輯地址與物理地址關系);8086存儲器分段概念;8086存儲器組織(存儲順序);8086的外部引腳;8086處理器的基本時序。
標簽: 接口資料1
上傳時間: 2016-01-03
上傳用戶:glylgw
/**************************************************************** 外部晶振8M PA0~3:四位數碼管的位選 PB0~7:數碼管的8位段選 外部中斷0用于計數 定時器0溢出中斷的定時為1ms 說明 :檢測到水流較小時,繼電器延時1秒關閉 ******************************************************************/ #include<iom16v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //數碼管段選 char position[4]={0xfe,0xfd,0xfb,0xf7};//數碼管位選 uint sumnum=0; //用于記錄1000ms內進入中斷的次數 uint time=0; //記錄進入比較定時器0的次數 uint num=0; //記錄1ms內進入中斷的次數 uint count=0; //進入外部中斷0的次數 uchar flag; uint sumnum1; //記錄100ms內的數目 /***************************函數聲明***************************/ void delay(); void display(uint m ); void init(); void init_0(); void init_2(); void _delay_us(uint l) { unsigned int i; for(i=0;i<l;i++) { asm("nop"); } } /**************************主函數***********************************/ void main() { init(); init_0(); init_2(); while(sumnum<5) { PORTD=0XBF; segdisplay(sumnum1); } while(1) { segdisplay(sumnum1); } } /*************************掃描數碼管時的延時函數*********************/ void delay() { uchar i,j; for(i=6;i>0;i--) for(j=225;j>0;j--); } /************************數碼管顯示函數*****************************/ void segdisplay( int temp) { int seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int temp1,temp2,temp3,temp4; temp1=temp/1000; temp2=(temp/100)%10; temp3=(temp/10)%10; temp4=temp%10; DDRB=0xff; DDRA|=0x0f; PORTA=~BIT(3); PORTB=seg[temp1]; _delay_us(100); PORTA=~BIT(2); PORTB=seg[temp2]; _delay_us(100); PORTA=~BIT(1); PORTB=seg[temp3]; _delay_us(100); PORTA=~BIT(0); PORTB=seg[temp4]; _delay_us(100); } /***********************管腳初始化函數*********************/ void init() { DDRD|=0X40; //PD4 設置為輸出 PORTD=0XBF; DDRA=0XFF; DDRB=0XFF; PORTA=0XFF; PORTB=0XFF; } /***********************外部中斷0初始化*********************/ void init_0() { MCUCR=0X02; //INT0為下降沿觸發 GICR=0X40; //使能INT0中斷 SREG=0X80; //使能總中斷 } /**********************定時器2初始化***********************/ void init_2() { TCCR0=0x03; // 內部時鐘,64 分頻(8M/64=125KHz) TCNT0=0x83; //裝初值 TIMSK=0x01; // 允許 T/C0溢出中斷中斷 } /***********************外部中斷0子函數********************/ #pragma interrupt_handler int0_isr:2 void int0_isr(void) { count++; } /*********************定時計數器0溢出中斷子函數*****************/ #pragma interrupt_handler int0_over:10 void int0_over(void) { TCNT0=0x83; //重裝初值 if((time%100) == 0) sumnum1 = num; if(time == 1000) { sumnum=num; if(sumnum<10) { if((flag==1)&&(sumnum<10)) { PORTD=0XFF; flag=0; } flag++; } else PORTD=0XBF; num=0; time=0; } num+=count; count=0; ++time; }
標簽: C語言
上傳時間: 2016-03-09
上傳用戶:彥 yan
在本課中,我們要用一個按鍵來實現跑馬燈的 10 級調速。這又會涉及到鍵的去抖的問 題。 本課的試驗結果是,每按一次按鍵,跑馬速度就降低一級,共 10 級。 這里我們又增加了一個變量 speedlever,來保存當前的速度檔次。 在按鍵里的處理中,多了當前檔次的延時值的設置。 請看程序: ―――――――――――――――― #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一個 52 標準內核的頭文件 sbit P10 = P1^0; //頭文件中沒有定義的 IO 就要自己來定義了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit K1= P3^2; bit ldelay=0; //長定時溢出標記,預置是 0 uchar speed=10; //設置一個變量保存默認的跑馬燈的移動速度 uchar speedlever=0; //保存當前的速度檔次 char code dx516[3] _at_ 0x003b;//這是為了仿真設置的 //一個按鍵控制的 10 級變速跑馬燈試驗 void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//預定的寫入 P1 的值 uchar ledi; //用來指示顯示順序 uint n; RCAP2H =0x10; //賦 T2 的預置值 0x1000,溢出 30 次就是 1 秒鐘 RCAP2L =0x00; TR2=1; //啟動定時器 ET2=1; //打開定時器 2 中斷 EA=1; //打開總中斷 while(1) //主程序循環 { if(ldelay) //發現有時間溢出標記,進入處理 { ldelay=0; //清除標記 P1=ledp[ledi]; //讀出一個值送到 P1 口 ledi++; //指向下一個 if(ledi==4) { ledi=0; //到了最后一個燈就換到第一個 } } if(!K1) //如果讀到 K1 為 0 { for(n=0;n<1000;n++); //等待按鍵穩定 while(!K1); //等待按鍵松開 for(n=0;n<1000;n++); //等待按鍵穩定松開 speedlever++; if(speedlever==10)speedlever=0; speed=speedlever*3; //檔次和延時之間的預算法則,也可以用查表方法,做出 不規則的法則 } } } //定時器 2 中斷 timer2() interrupt 5 { static uchar t; TF2=0; t++; if((t==speed)||(t>30)) //比較一個變化的數值,以實現變化的時間溢出,同時限制了最慢速 度為 1 秒 { t=0; ldelay=1;//每次長時間的溢出,就置一個標記,以便主程序處理 } } ―――――――――――――――――――――― 請打開 lesson11 目錄的工程,編譯,運行,看結果: 按 K1,速度則降低一次,總共 10 個檔次。
上傳時間: 2017-11-06
上傳用戶:szcyclone
LED 一般是恒流操作的,如何改變 LED 的亮度呢?答案就是 PWM 控制。在一定的 頻率的方波中,調整高電平和低電平的占空比,即可實現。比如我們用低電平點亮一個 LED 燈,我們假設把一個頻率周期分為 10 個時間等份,如果方波中的高低電平占空比是 9:1, 這是就是一個比較暗的亮度,如果方波中高低電平占空比是 10:0,這時,全部是高電平, 燈是滅的。如果占空比是 5:5,就是一個中間亮度,如果高低比是 1:9,是一個比較亮的 亮度,如果高低是 0:10,這時全部是低電平,就是最亮的。 實際上應用中,電視屏幕墻中的幾十百萬 LED 象素都是這樣控制的,而且每一個象素 都有紅綠藍 3 個 LED,每個 LED 可以變化的亮度是幾百到幾萬或者更多的級別,以實現真 彩色的顯示。還有在您的手機中,背光燈的亮度如果是可以變化的,也應該是這種工作方式。 目前的城市彩燈也有很多都使用了 LED,需要控制亮度是也是 PWM 控制。 下面來分析我們的例程,在這個例程中,我們將定時器 2 溢出定為 1/1200 秒。每 10 次脈沖輸出一個 120HZ 頻率。這每 10 次脈沖再用來控制高低電平的 10 個比值。這樣,在 每個 1/120 秒的方波周期中,我們都可以改變方波的輸出占空比,從而控制 LED 燈的 10 個 級別的亮度。 為什么輸出方波的頻率要 120HZ 這么高?因為如果頻率太低,人眼就會看到閃爍感 覺。一般起碼要在 60HZ 以上才感覺好點,120HZ 就基本上看不到閃爍,只能看到亮度的變 化了。 下面請看程序,程序中有比較多的注釋: ――――――――――――――――――――――― #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一個 52 標準內核的頭文件 sbit P10 = P1^0; //要控制的 LED 燈 sbit K1= P3^2; //按鍵 K1 uchar scale;//用于保存占空比的輸出 0 的時間份額,總共 10 份 char code dx516[3] _at_ 0x003b;//這是為了仿真設置的 //模擬 PWM 輸出控制燈的 10 個亮度級別 void main(void) // 主程序 { uint n; RCAP2H =0xF3; //賦 T2 的預置值,溢出 1 次是 1/1200 秒鐘 RCAP2L =0x98; TR2=1; //啟動定時器 ET2=1; //打開定時器 2 中斷 EA=1; //打開總中斷 while(1) //程序循環 { ;//主程序在這里就不斷自循環,實際應用中,這里是做主要工作 for(n=0;n<50000;n++); //每過一會兒就自動加一個檔次的亮度 scale++; if(scale==10)scale=0; } } //1/1200 秒定時器 2 中斷 timer2() interrupt 5 { static uchar tt; //tt 用來保存當前時間在一秒中的比例位置 TF2=0; tt++; if(tt==10) //每 1/120 秒整開始輸出低電平 { tt=0; if(scale!=0) //這里加這一句是為了消除滅燈狀態產生的鬼影 P10=0; } if(scale==tt) //按照當前占空比切換輸出高電平 P10=1; } ―――――――――――――――――― 在主程序中,每延時一段時間,就自動換一個占空比,以使亮度自動變化,方便觀察。 編譯,運行,看結果。 可以看到,LED 的亮度以每種亮度 1 秒左右不斷變化,共有 10 個級別。
上傳時間: 2017-11-06
上傳用戶:szcyclone
型 號:VK1625 / 品牌 VINTEK/VINKA/元泰 封裝形式:QFP100 LQFP100 DICE裸片 COB邦定片 定制COG 基本說明 VK1625是一個外圍設備專門設計的I / O型微控制器用于LCD擴大顯示功能。該裝置的顯示部分512模式(64x8)。它也支持串行接口,蜂鳴器響,看門狗定時器和時基定時器功能。HT1625是一個內存映射和多功能的LCD控制器。的VK1625軟件配置特征使它適合于多種LCD應用包括液晶顯示模塊和顯示子系統。只用三條線是主機控制器和VK1625之間的接口要求。有QFP100封裝,LQFP100封裝。 QQ:1918885898 VK1625 產品特征 ★:工作電壓:2.7V ~ 5.2V ★:內置的RC振蕩器 ★:外部的32.768kHz晶體和32kHz頻率源的輸入 ★:1 / 4偏壓,1 / 8的duty,幀頻為64Hz ★:64x8顯示模式8X64段 ★:內置的內部電阻式偏置發生器 ★:三條線串行接口 ★:8種時基/ WDT的選擇 ★:時基或WDT溢出輸出 ★:液晶顯示內存的R / W地址自動遞增 ★:兩個可選蜂鳴器的頻率(2/3) ★:關機命令降低功耗 ★:軟件配置特征 ★:數據模式和命令模式指令 ★:三條數據訪問模式 ★:提供 VLCD引腳來調整 LCD 工作電壓 ★:規格介紹 100引腳 LQFP封裝 VK1625 LQFP100 100引腳 QFP封裝VK1625 QFP100
標簽: 1625 LCD VK HT 液晶 顯示驅動 程序設計
上傳時間: 2018-07-10
上傳用戶:szqxw1688
深圳永嘉微電 超高性價比水位檢測芯片推出 *水位檢測芯片可用于需要檢測水位,缺水,溢出等場合。適合應用于飲水機、凈飲機、咖啡機、水壺、洗碗機、制冰機等水相關家用電器和電子產品。 測試環境:在一個玻璃容器外壁(玻璃1-5毫米不等),通過雙面電子導熱硅膠,把水位檢測PCB直接貼在玻璃上面檢測水位。1-8點高靈敏度電容式水位檢測專用觸控IC-VK36W系列 水位檢測 背景技術: 目前的檢水方式主要有探針檢水、水位傳感器檢水(光電式水位傳感器,超聲波水位傳感器)和干簧管檢水等方式,但這些方式的應用成本高,并且其安裝時需要用到很長的連接線路,為了配合長的連接線路,容易使得產品的結構受到限制,并且拆裝復雜,價格昴貴,不利于產品的推廣及普及廣泛應用。 技術實現要素: 為解決上述問題,本實用新型的目的在于提供一種觸摸感應檢水電路,能夠準確檢測是否有水,并且能夠降低電路的成本幾個等級,簡化檢水的結構,使得拆裝便利,有利于產品的生產。 VK36WXX系列(最多支持9個檢測點) 是一款用于一段液位檢測的專用集成電路。基于電容感應的檢測原理,集成我們公司花費多年研究的獨特算法,能夠做到智能識別,無論是有液體上電,還是無液體上電,都能正確指示液位狀態。本產品既可適用于直接接觸液體的檢測裝置,也可適用于不直接接觸液體的檢測裝置。尤其是非接觸式的檢測更安全更方便、更有優勢,也可防腐蝕、防污染 1.液體檢測器 2.觸摸開關 3.加溫器 4.噴霧器 5 水池、水箱、水缸、液體皿 聯系人:許先生 聯系手機:188 9858 2398 (微信) 聯系QQ:191 888 5898 E-mail:zes1688@163.com
標簽: 16 36W SOP QFN VK 36 8I W8 水位檢測 感應電容
上傳時間: 2019-08-28
上傳用戶:szqxw1688