![]() |
發布時間: 2024-5-26 17:09
正文摘要:本人小白一枚,如圖這個題請問流水閃爍各1s用定時器這一步和兩機串口通信怎么聯系到一塊,謝謝大佬,麻煩詳細點謝謝(求求詳細點代碼) |
想要看就干脆看個明白從非定時轉定時代碼基本一樣。 #include "reg52.h" unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共陰0~F消隱減號 sbit k1=P3^4; sbit k2=P3^5; sbit k3=P3^6; sbit k4=P3^7; bit k=0,kk=0; void CKF(unsigned char C) {//向串口發送數據 SBUF=C; while(!TI); TI=0; } void CKS() interrupt 4 {//串口接收數據 if(RI) { RI=0; if(SBUF=='S'){k=1;kk=0;} if(SBUF=='X'){k=0;kk=1;} if(SBUF=='L'){k=kk=0;} } } void CKSZ() { SCON=0X50;//串口模式1允許接收 TMOD=0X20;//T1工作模式2 PCON=0X00;//波特率不倍增 TH1=TL1=0XFD;//波特率9600 TI=RI=0; TR1=1; IE=0X90;//允許串口中斷 } void main() {//緣由https://ask.csdn.net/questions/8117223 unsigned char Xd=0,ls=0,ys=0,sy=0,sm=0; CKSZ(); while(1) { if(++ys==0) { if(++sy==0) { if(k) { if(ls)ls*=2;else ls=1; if(sm<9)++sm;else sm=0; } if(kk) { if(ls)ls/=2;else ls=128; if(sm)--sm;else sm=9; } if(k==kk)ls=k; } P1=ls;//流水燈 P2=smgduan[sm];//靜態數碼管 } if(!k1&&!++Xd) { CKF('S'); while(!k1); } if(!k2&&!++Xd) { CKF('X'); while(!k2); } if(!k3&&!++Xd) { CKF('L'); while(!k3); } } } https://blog.csdn.net/xianfajushi/article/details/139620581 |
void CKSZ() { SCON=0X50;//串口模式1允許接收 TMOD=0X21;//T1工作模式2 PCON=0X00;//波特率不倍增 TH1=TL1=0XFD;//波特率9600 TI=RI=0; TR1=1; IE=0X90;//允許串口中斷 TH0+=0Xdc;//定時器賦初值,定時10ms觸發中斷,自動補償方式 TL0+=0X00; TR0=1; //啟動定時器T0。 ET0=1; //開啟定時器 EA=1; //全局中斷開關 } void ZhongDuan() interrupt 1 { ++Js; TH0+=0Xdc; TL0+=0X00; } ———————————————— 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 原文鏈接:https://blog.csdn.net/xianfajushi/article/details/139632525 |
jiesz185 發表于 2024-5-27 14:31 流水燈程序不要放在U1,U1只負責發送按鍵信息,流水燈程序由U2負責。 |
第一個ic發送控制信息 0x01 0x02 第二個ic收到后執行 定時器里設定1秒標志位 用for循環 |
就兩個狀態,用啥串口啊,兩個腳各自表示一個狀態就行了啊。把兩個按鍵傳遞到P30和P31就行了吧 |
![]() |
這是兩碼事。 兩機串行通訊,只要開啟雙方的串行中斷,通訊時,約幾ms中斷一次,完成一個字節的交流。 流水閃爍中人用定時器,每間隔1S處理一下顯示就行了。 |
U1發送按鍵標志碼,U2接收標志碼,定時器+流水燈。各個擊破,難度不大。 |
用的Proteus仿真的 |