欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機串口通信 矩陣鍵盤的程序為什么一直調試不出來 仿真,好像通信不上
[打印本頁]
作者:
Carlohy
時間:
2020-5-5 19:07
標題:
單片機串口通信 矩陣鍵盤的程序為什么一直調試不出來 仿真,好像通信不上
在線等,挺急的。郭天祥 串口通信 矩陣鍵盤的程序為什么一直調試不出來 proteus仿真,好像通信不上一樣,網上有說到其程序不一定正確,也找了些網友改過的程序,都沒有調試出來,要么就顯示888888,結果試過很多種,但無一例外,甲機不管按下哪個按鍵,乙機顯示都毫無改變。 這個程序改了幾天了都沒弄好-- 請求大佬支援
原程序是甲機按下按鍵,乙機就顯示,具體接了什么顯示,有幾個顯示我不確定。我想在甲機發送6個數字,乙機有(6個連起來的數碼管)7SEG MPX6 CA就顯示這6個數,改了一點程序。對串口這塊,試過其他例子有時也好像通訊不上,所以很迷。仿真的單片機12MHZ或11.0592MHZ都試過
單片機源程序如下:
#include "reg51.h"//有74HC573鎖存器 接收的乙機
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;//申明U1鎖存器的鎖存端
sbit wela=P2^7;//申明U2鎖存器的鎖存端
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char i;
void display(uchar num){
P0=table[num];dula=1;dula=0;}
void main(){
TMOD=0; //定時器T1工作于方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //接收允許
SM0=0;SM1=1; //開串行口中斷
ES=1; EA=1; //開總中斷允許位
P0=0xc0;wela=1;wela=0;
while(1);}
void ser()interrupt 4
{uchar a;
EA=0;RI=0;buffer[i]=SBUF;a=buffer[i];i++;if(i==6) i=0;display(a);}
復制代碼
作者:
Carlohy
時間:
2020-5-5 19:09
#include "reg51.h"//甲機 發送方
#define uchar unsigned char
#define uint unsigned int
int key,num;
unsigned char code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,
0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //鍵盤按鍵對應的掃描碼表
void delay(uint xms)
{uint i,j;for(i=xms;i>0;i--)
for(j=110;j>0;j--);}
void send(uchar key_num)
{SBUF=key_num;
while(!TI); TI=0;}
void scan(){
uchar temp,key;
P2=0xfe;temp=P2;temp=temp&0xf0;
if(temp!=0xf0){
delay(5);temp=P2;temp=temp&0xf0;
if(temp!=0xf0){temp=P2;
switch(temp)
{case 0xee:
key=0;break;
case 0xde:
key=1;break;
case 0xbe:
key=2;break;
case 0x7e:
key=3;break;}
while(temp!=0xf0){temp=P2;temp=temp&0xf0;}
send(key);}}
P2=0xfd;temp=P2;temp=temp&0xf0;
if(temp!=0xf0){delay(5);temp=P2;temp=temp&0xf0;
if(temp!=0xf0){temp=P2;
switch(temp)
{case 0xed:
key=4;break;
case 0xdd:
key=5;break;
case 0xbd:
key=6;break;
case 0x7d:
key=7;break;}
while(temp!=0xf0){temp=P2;temp=temp&0xf0;}
send(key);}}
P2=0xfb;temp=P2;temp=temp&0xf0;if(temp!=0xf0){
delay(5);temp=P2;temp=temp&0xf0;if(temp!=0xf0)
{temp=P2;
switch(temp)
{case 0xeb:
key=8;break;
case 0xdb:
key=9;break;
case 0xbb:
key=10;break;
case 0x7b:
key=11;break;}
while(temp!=0xf0){temp=P2;temp=temp&0xf0;}
send(key);}}
P2=0xf7;temp=P2;temp=temp&0xf0;if(temp!=0xf0){
delay(5);temp=P2;temp=temp&0xf0;if(temp!=0xf0)
{temp=P2;
switch(temp)
{case 0xe7:
key=12;break;
case 0xd7:
key=13;break;
case 0xb7:
key=14;break;
case 0x77:
key=15;break;}
while(temp!=0xf0){temp=P2;temp=temp&0xf0;}
send(key);}}
}
void main(){
TMOD=0x20; //定時器T1工作于方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
REN=1;
ES=1; //開串行口中斷
EA=1; //開總中斷允許位
while(1){scan(); }}
作者:
hotpet
時間:
2020-5-6 00:26
這種兩機聯調的,要先把兩邊分開,確定是哪一邊的問題才能修改程序。可以先用串口助手看甲發出什么信號是否正常,然后用串口助手向乙發送應由甲發送的信號看乙是否有反應,根據結果判斷是哪一方的問題。如果仿真就用虛擬終端看串口輸出,或將串口輸出映射到虛擬串口,然后使用串口助手。
作者:
hantu
時間:
2020-5-6 11:32
你把仿真圖跟全部的項目文件打包上來那還差不多,光眼看代碼是調試不了的。
作者:
Carlohy
時間:
2020-5-6 19:53
好的,我馬上上傳
作者:
Carlohy
時間:
2020-5-6 19:57
proteus圖之前換過幾個P口試過
serial.rar
2020-5-6 19:54 上傳
點擊文件名下載附件
135.58 KB, 下載次數: 12
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1