最近買了塊開發板學習單片機,以下是電路原理圖。不明白上面的4×4矩陣鍵盤(電路圖最左上角)的編碼原理。鍵盤的8條引線直接與P1.0^P1.7相連,疑惑的是即使按下任意按鍵也在P1口上讀不到任何電平啊? 期待高手指點!
上傳時間: 2017-08-11
上傳用戶:TRIFCT
本程序使用STC12C5AXXS2系列單片機,在P1.3輸出0~5V的電壓。可通過串口在線對輸出電壓進行控制,并通過串口在上位機顯示當時的輸出電壓。僅需一片單片機和兩個10k的電阻和0.1uF的電容。內有硬件連線圖。
上傳時間: 2014-12-05
上傳用戶:dragonhaixm
Main program running when workpiece is ready on deferent belt(deferent_ready=ture). * Call Square_Wave subroutine to generate 0.5ms square wave on P1.2 to drive * electromotor,then drive deferent belt step forward. When it steps to the measure * zone, it stops to be measured. Then call A_D subroutine to transform analog * signals to digital signals , after then call serial subroutine to transfer * digital signals to PC. Call square wave subroutine to drive deferent belt step to * original position waitting for defere ready flag to run the next circle.
標簽: deferent_ready workpiece deferent program
上傳時間: 2017-08-31
上傳用戶:baiom
本系統采用MSC-51系列單片機ATSC51和可編程并行I/O接口芯片8255A為中心器件來設計交通燈控制器,實現了能根據實際車流量通過8051芯片的P1口設置紅、綠燈燃亮時間的功能;紅綠燈循環點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過8255的PC口輸出至雙位數碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數碼管顯示。
上傳時間: 2014-01-18
上傳用戶:sunjet
LCA51單片機實驗書付實驗程序,數據排序,二進制數轉換成ASCII碼 ,內存塊移動,數據傳送子程序,查找相同數個數,脈沖計數(定時/計數器實驗),擴展存儲器讀寫實驗, P1口輸入、輸出實驗等等
上傳時間: 2014-01-20
上傳用戶:zhouli
由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
用于仿真進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經過模/數轉換后,產生相應的數字量經過其輸出通道D0-D7傳送給AT89C51芯片的P1口,AT89C51負責把接收到的數字量經過數據處理,產生正確的7段數碼管的顯示段碼傳送給四位LED,同時它還通過其四位I/O口P2.0、P2.1、P2.2、P2.3產生位選信號控制數碼管的亮滅。此外,AT89C51還控制ADC0808的工作。其中,單片機AT89C51通過定時器中斷從P2.4輸出方波,接到ADC0808的CLOCK,P2.6發正脈沖啟動A/D轉換,P2.5檢測A/D轉換是否完成,轉換完成后,P2.7置高從P1口讀取轉換結果送給LED顯示出來[3]。簡易數字直流電壓表的硬件電路已經設計完成,就可以選取相應的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細地檢查修改,直至形成完善的硬件原理圖。但要真正實現電路對電壓的測量和顯示功能,還需要有相應的軟件配合,才能達到設計要求。
標簽: 程序
上傳時間: 2015-02-27
上傳用戶:dpseternal
此電路的工作原理是:+5V模擬電壓信號通過變阻器VR1分壓后由ADC08008的IN0通道進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經過模/數轉換后,產生相應的數字量經過其輸出通道D0-D7傳送給AT89C51芯片的P1口,AT89C51負責把接收到的數字量經過數據處理,產生正確的7段數碼管的顯示段碼傳送給四位LED,同時它還通過其四位I/O口P2.0、P2.1、P2.2、P2.3產生位選信號控制數碼管的亮滅。此外,AT89C51還控制ADC0808的工作。其中,單片機AT89C51通過定時器中斷從P2.4輸出方波,接到ADC0808的CLOCK,P2.6發正脈沖啟動A/D轉換,P2.5檢測A/D轉換是否完成,轉換完成后,P2.7置高從P1口讀取轉換結果送給LED顯示出來[3]。簡易數字直流電壓表的硬件電路已經設計完成,就可以選取相應的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細地檢查修改,直至形成完善的硬件原理圖。但要真正實現電路對電壓的測量和顯示功能,還需要有相應的軟件配合,才能達到設計要求
標簽: 電源設計
上傳時間: 2015-02-27
上傳用戶:dpseternal
? 出動m只螞蟻,每只螞蟻各隨機選擇一條路徑,記為I=[1 2 3···m],長度記為long(I); ? 計算出每條路徑的信息素濃度,記為P(I)=1/long(I),并進行歸一化處理; ? 重新出動m只螞蟻,按如下規則選擇路徑: l 每只螞蟻都以一個概率P1選擇新路徑(路徑隨機); l 未選擇新路徑的螞蟻以概率P(I)選擇路徑I; l 所有螞蟻都以一個小概率p2對自己的路徑進行局部變化; ? 更新所有路徑,計算出每條路徑的信息素濃度; ? 重復上述步驟,直至僅剩一條路徑。
上傳時間: 2015-04-16
上傳用戶:jackynie
兩個鏈表的交集 #include<stdio.h> #include<stdlib.h> typedef struct Node{ int data; struct Node *next; }Node; void initpointer(struct Node *p){ p=NULL; } int printlist(struct Node* head){ int flag=1; head=head->next; /* 因為標記1的地方你用了頭結點,所以第一個數據域無效,應該從下一個頭元結點開始 */ if(head==NULL) printf("NULL\n"); else { while(head!=NULL) { if(flag==1) { printf("%d",head->data); flag=0; } else { printf(" %d",head->data); } head=head->next; } printf("\n"); } return 0; } struct Node *creatlist(struct Node *head) { int n; struct Node *P1=(struct Node *)malloc(sizeof(struct Node)); P1->next=NULL; while(scanf("%d",&n),n!=-1) { struct Node *pnode=(struct Node *)malloc(sizeof(struct Node)); pnode->next=NULL; pnode->data=n; if(head==NULL) head=pnode; P1->next=pnode; P1=pnode; } return head; } struct Node *Intersect(struct Node *head1, struct Node *head2) { struct Node *P1=head1,*p2=head2;/*我這里沒有用頭指針和頭結點,這里是首元結點head1里面就是第一個數據,一定要理解什么事頭指針, 頭結點,和首元結點 具體你一定要看這個博客:http://blog.sina.com.cn/s/blog_71e7e6fb0101lipz.html*/ struct Node *head,*p,*q; head = (struct Node *)malloc(sizeof(struct Node)); head->next = NULL; p = head; while( (P1!=NULL)&&(p2!=NULL) ) { if (P1->data == p2->data) { q = (struct Node *)malloc(sizeof(struct Node)); q->data = P1->data; q->next = NULL; p->next = q;//我可以認為你這里用了頭結點,也就是說第一個數據域無效 **標記1** p = q; P1 = P1->next; p2 = p2->next; } else if (P1->data < p2->data) { P1 = P1->next; } else { p2 = p2->next; } } return head; } int main() { struct Node *head=NULL,*headt=NULL,*t; //initpointer(head);//這里的函數相當于head=NULL; // initpointer(headt);//上面已經寫了headt=NULL那么這里可以不用調用這個函數 head=creatlist(head); headt=creatlist(headt); t=Intersect(head,headt); printlist(t); }
標簽: c語言編程
上傳時間: 2015-04-27
上傳用戶:coco2017co