![]() |
發布時間: 2023-6-5 17:29
正文摘要:大家好最近學習單片機串口通信,教材給出的例子是一個數字密碼(935467)從甲傳遞給乙,再顯示到數碼管上。但通過Proteus仿真,一直顯示“8.8.8.8.8.8”,看不出問題在哪里。 發送端代碼如下: //程序:ex6_1.c // ... |
wulin 發表于 2023-6-7 15:49 多謝,我再好好琢磨~ |
Intel2006 發表于 2023-6-7 13:15 你仔細看一下甲機代碼,只在初始化時發送一次,如果乙機還沒有準備好,當然收不到,后續也沒有信號了。 |
多謝,但是我設置了消隱并修改了硬件為7SEG-MPX6-CA之后,顯示是6個“0”,還是沒解決啊?感覺甲機的數據傳送到乙(串口助手可以檢測到數據發送),但并沒有成功給buffer[]賦值,使得這個數組還是初始化的樣子。請問您知道里面的原因嗎? |
是的,我昨晚也發現它用的是共陰極了。教材還是國家特等獎,但例程不止這一個有問題。 |
Intel2006 發表于 2023-6-7 00:41 ![]() |
Intel2006 發表于 2023-6-7 00:41 消隱是問題之一,從你的圖片看明顯是數碼管用錯了,要用共陽。 |
多謝樓上的回復,但似乎不是消隱的問題。 |
void disp() { unsigned char w,i,j; w=0x01; //位碼賦初值 for(i=0;i<6;i++) { P2=0xff; // 消隱 P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標 P2=~w; // 送反相后的位碼 for(j=0;j<100;j++);// 顯示延時 w<<=1; // w左移一位 } } |
P2口輸出經過了反相器74LS04,所以在程序中的P1和P2輸出剛好反好,應該為 P1=~tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標 P2=w; // 送反相后的位碼 另外仿真時,數碼管顯示未消影,所以最終要把程序改成如下就對了: P1=0; P1=~tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標 P2=w; // 送反相后的位碼 |