使用C51解碼,紅外編碼NEC格式。晶振11.0592
標簽: 使用C51解碼
上傳時間: 2016-02-02
上傳用戶:pourout
/**************************************************************** 外部晶振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
C程序中可使用不同類型的變量來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變量。 以某晶振為12MHz的單片機為例,晶振為12MHz即一個機器周期為1us。
上傳時間: 2016-04-28
上傳用戶:xcx7694
hcs301滾動碼接收程序,是STC單片機解碼接收的,晶振11.0592
上傳時間: 2016-07-15
上傳用戶:liangyan320
采用純硬件打造的數字頻率計,不包含任何單片機,晶振,計數器,譯碼器,數碼管
上傳時間: 2017-12-13
上傳用戶:fengshu
是否要先打開ALLEGRO? 不需要(當然你的機器須有CADENCE系統)。生成完封裝后在你的輸出目錄下就會有幾千個器件(全部生成的話),默認輸出目錄為c:\MySym\. Level里面的Minimum, Nominal, Maximum 是什么意思? 對應ipc7351A的ABC封裝嗎? 是的 能否將MOST, NOMINAL, LEAST三種有差別的封裝在命名上也體現出差別? NOMINAL 的名稱最后沒有后綴,MOST的后綴自動添加“M”,LEAST的后綴自動添加“L”,你看看生成的庫名稱就知道了。(直插件以及特別的器件,如BGA等是沒有MOST和LEAST級別的,對這類器件只有NOMINAL) IC焊盤用長方形好像比用橢圓形的好,能不能生成長方形的? 嗯。。。。基本上應該是非直角的焊盤比矩形的焊盤好,我記不得是AMD還是NS還是AD公司專門有篇文檔討論了這個問題,如果沒有記錯的話至少有以下好處:信號質量好、更省空間(特別是緊密設計中)、更省錫量。我過去有一篇帖子有一個倒角焊盤的SKILL,用于晶振電路和高速器件(如DDR的濾波電容),原因是對寬度比較大的矩形用橢圓焊盤也不合適,這種情況下用自定義的矩形倒角焊盤就比較好了---你可以從網上另外一個DDR設計的例子中看到。 當然,我已經在程序中添加了一選擇項,對一些矩形焊盤可以選擇倒角方式. 剛才試了一下,感覺器件的命名的規范性不是太好,另好像不能生成器件的DEVICE文件,我沒RUN完。。。 這個程序的命名方法基本參照IPC-7351,每個人都有自己的命名嗜好,仍是不好統一的;我是比較懶的啦,所以就盡量靠近IPC-7351了。 至于DEVICE,的選項已經添加 (這就是批量程序的好處,代碼中加一行,重新生產的上千上萬個封裝就都有新東西了)。 你的庫都是"-"的,請問用過ALLEGRO的兄弟,你們的FOOTPRINT認"-"嗎?反正我的ALLEGRO只認"_"(下劃線) 用“-”應該沒有問題的,焊盤的命名我用的是"_"(這個一直沒改動過)。 部分絲印畫在焊盤上了。 絲印的問題我早已知道,只是盡量避免開(我有個可配置的SilkGap變量),不過工作量比較大,有些已經改過,有些還沒有;另外我沒有特別費功夫在絲印上的另一個原因是,我通常最后用AUTO-SILK的來合并相關的層,這樣既方便快捷也統一各個器件的絲印間距,用AUTO-SILK的話絲印線會自動避開SOLDER-MASK的。 點擊allegro后命令行出現E- Can't change to directory: Files\FPM,什么原因? 我想你一定是將FPM安裝在一個含空格的目錄里面了,比如C:\Program Files\等等之類,在自定義安裝目錄的時候該目錄名不能含有空格,且存放生成的封裝的目錄名也不能含有空格。你如果用默認安裝的話應該是不會有問題的, 默認FPM安裝在C:\FPM,默認存放封裝的目錄為C:\MYSYM 0.04版用spb15.51生成時.allegro會死機.以前版本的Allegro封裝生成器用spb15.51生成時沒有死機現象 我在生成MELF類封裝的時候有過一次死機現象,估計是文件操作錯誤導致ALLEGRO死機,原因是我沒有找到在skill里面直接生成SHAPE焊盤的方法(FLASH和常規焊盤沒問題), 查了下資料也沒有找到解決方法,所以只得在外部調用SCRIPT來將就一下了。(下次我再查查看),用SCRIPT的話文件訪問比較頻繁(幸好目前MELF類的器件不多). 解決辦法: 1、對MELF類器件單獨選擇生成,其它的應該可以一次生成。 2、試試最新的版本(當前0.05) 請說明運行在哪類器件的時候ALLEGRO出錯,如果不是在MELF附近的話,請告知,謝謝。 用FPM0.04生成的封裝好像文件都比較大,比如CAPC、RES等器件,都是300多K,而自己建的或采用PCB Libraries Eval生成的封裝一般才幾十K到100K左右,不知封裝是不是包含了更多的信息? 我的每個封裝文件包含了幾個文字層(REF,VAL,TOL,DEV,PARTNUMBER等),SILK和ASSEM也是分開的,BOND層和高度信息,還有些定位線(在DISP層),可能這些越來越豐富的信息加大了生成文件的尺寸.你如果想看有什么內容的話,打開所有層就看見了(或REPORT) 非常感謝 LiWenHui 發現的BUG, 已經找到原因,是下面這行: axlDBChangeDesignExtents( '((-1000 -1000) (1000 1000))) 有尺寸空間開得太大,后又沒有壓縮的原因,現在生成的封裝也只有幾十K了,0.05版已經修復這個BUG了。 Allegro封裝生成器0.04生成do-27封裝不正確,生成封裝的焊盤的位號為a,c.應該是A,B或者1,2才對. 呵呵,DIODE通常管腳名為AC(A = anode, C = cathode) 也有用AK 或 12的, 極少見AB。 除了DIODE和極個別插件以及BGA外,焊盤名字以數字為主, 下次我給DIODE一個選擇項,可以選擇AC 或 12 或 AK, 至于TRANSISTER我就不去區分BCE/CBE/ECB/EBC/GDS/GSD/DSG/DGS/SGD/SDG等了,這樣會沒完沒了的,我將對TRANSISTER強制統一以數字編號了,如果用家非要改變,只得在生成庫后手工修改。
標簽: Footprint Maker 0.08 FPM skill
上傳時間: 2018-01-10
上傳用戶:digitzing
本文就使用石英晶體振蕩器的周圍電路設計中的噪音對策進行解說。
上傳時間: 2018-03-02
上傳用戶:ahldcb004040
單片機 :AT89S52 或 STC89C52RC 典型傳感器:AM2301 功能 :串口發送溫濕度數據 波特率 9600 晶振 :12M (用戶系統時鐘如不是12M 請更改相關宏定義及注釋的延時時間) 編譯環境: Keil 4
上傳時間: 2018-07-27
上傳用戶:gmc832002
基于stc89C52的方波發生器 /*2018.08月制作完成;STC89C51,貼片,共陽LED *T0-計時25 微秒溢出中斷一次;P1.0 P1.1為增加、減少鍵P0.7 輸出方波 變量的定義: pwm 設定的頻率數 connter_1 根據設定頻率計算后的,定時器溢出的次數值 connter : 定時器0計數溢出數 led_seg_code: 數碼管7 段碼 晶振:12M ,共陰數碼管或三極管驅動共陽數碼管 */ /*用單片機產生頻率可調的方波信號。輸出方波的頻率范圍為1Hz-200Hz,頻率誤差比小于0.5%。 要求用"增加"、"減小"2 個按鈕改變方波給定頻率,按鈕每按下一次,給定頻率改變的步進步長為1Hz, 當按鈕持續按下的時間超過2 秒后,給定頻率以10 次/秒的速度連續增加(減少),輸出方波的頻率要求在數碼管上顯示。 P1.0,P1.1分別為增加和減小按鍵*/
上傳時間: 2020-02-09
上傳用戶:jmkl128
題目:基于51單片機的RS485從機系統設計 單片機接口資源配置: 1. 上電復位電路; 2. 晶振電路采用11.0592Mhz晶振; 3. 485接口電路(P3.7用于485芯片的收發控制,收發管腳接單片機的rxd和txd); 4. P2口通過外部跳線接相應的高低電平,配置從機地址為組號; 5. P3.6外接一發光二極管(注意串聯電阻進行限流); 6. P3.2外接一按鍵,斷開高電平,按下低電平; 7. 按鍵檢測采用外部中斷方式,下跳沿觸發; 8. 單片機定時器0以模式1(16位模式)工作,產生50ms的定時中斷,并在此基礎上設計一單片機內部時鐘(24小時制,能計數時、分、秒、50ms值); 9. 單片機串行通信采用模式1非多機通信方式,采用9600波特率以串行中斷方式進行數據的收發通信,主機地址為0xF0,廣播地址為0xFF。 系統功能需求: 1. 系統配置和自檢功能: l 從機上電后進行初始化,通過讀取P2口進行從機地址配置; l 發光二極管以每秒一次的頻率閃爍(亮0.5秒,滅0.5秒); l 檢測到一次按鍵按下操作后,熄滅發光二極管。 2. 數據接收和按鍵計時功能: l 從機接收主機程序(PC機上的串口調試程序)的按鍵允許命令幀并進行校驗; l 校驗正確并且目的地址是廣播地址或者本從機的地址,通過發光二極管長亮指示,并允許按鍵操作; l 按鍵按下后,盡可能準確記錄按鍵的動作時點(定時器的低8位、定時器的高8位、50ms值、秒、分、小時); l 按鍵操作只能響應一次,重復按鍵操作不響應; l 按鍵的動作時點記錄后,發光二極管以每秒一次的頻率閃爍(亮0.5秒,滅0.5秒)。 3. 數據發送功能: l 從機接收主機程序發來的時鐘數據搜索命令幀并進行校驗; l 如果校驗正確并且數據幀的目的地址是本從機的地址,從機將前面記錄的按鍵動作時點數據(定時器的低8位、定時器的高8位、50ms值、秒、分、小時)按附錄中的時鐘數據返回幀的幀格式回傳給主機; l 時鐘數據返回幀回傳結束后,熄滅發光二極管。 4. 校驗和生成和檢測功能: l 發送數據幀時能自動生成數據幀校驗和; l 每幀數據在發送幀尾前,發送一字節的當前幀數據的校驗和; l 接收數據幀時能檢測校驗和并判斷接收數據是否正確。 附錄:幀定義 校驗和的計算:除去幀頭和幀尾后將幀中的其他數據求和并取低8位; 幀長:不計幀頭、幀尾和校驗和字節。 按鍵允許命令幀: 幀頭 幀長 目的地址 源地址 命令字 校驗和 幀尾 AA 04 FF F0 01 F4 66 時鐘數據搜索命令幀: 幀頭 幀長 目的地址 源地址 命令字 保留字 校驗和 幀尾 AA 05 01 F0 03 00 F9 66 時鐘數據返回幀: 幀頭 幀長 目的地址 源地址 命令字 TL0 TH0 50ms 秒 分 時 校驗和 幀尾 AA 0A F0 01 07 01 B6 09 03 00 00 C5 66 幀結構頭文件frame.h(內容如下) //幀格式定義 #define FRAME_HEAD 0xAA //幀頭 #define FRAME_FOOT 0x66 //幀尾 #define FRAME_LEN 0x00 //幀長 #define FRAME_DST_ADR 0x01 //目的地址 #define FRAME_SRC_ADR 0x02 //源地址 #define FRAME_CMD 0x03 //命令字 #define FRAME_DATA 0x04 //幀數據起始 //幀命令定義 #define READY 0x01 //按鍵允許命令 #define TIME_SERCH 0x03 //時鐘數據輪詢命令 #define TIME_BACK 0x07 //時鐘數據返回命令 //地址定義 #define BROAD_ADR 0xFF //廣播地址 #define MASTER_ADR 0xF0 //主機地址
上傳時間: 2020-06-18
上傳用戶:umuo