主從機之間的叫號取號串行通信,缺少頭文件 求大神指導如何 編寫?
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
屏幕截圖 2021-05-06 191617.jpg (468.71 KB, 下載次數: 80)
下載附件
仿真如圖
2021-5-6 19:18 上傳
單片機源程序如下:
- #include "LCD1602.h" //包含自定義頭文件
- #include "reg51.h"
- #include <math.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit btn1 = P1^0; //1號窗口
- sbit btn2 = P1^1; //2號窗口
- sbit btn3 = P1^2; //3號窗口
- sbit beep = P1^6; //蜂鳴器
- sbit Green = P2^3;
- uchar S = 1; //初始化主機按鈕電平
- uchar an = 0;//叫號數
- uchar an_1 = 0;
- uchar an_2 = 0;
- uchar an_3 = 0;
- uchar receiveData = 0; //接收到的數據
- //*************************延時函數***************************//
- void delay(uint i){
- int j=0;
- for(j=0;j<i;j++);
- }
- //******************************串口初始化函數**************************************
- void UsartInit(){
- SCON=0X50; //設置為串口工作方式1
- TMOD=0X20; //設置定時器工作方式2
- PCON=0X00; //波特率不加倍 PCON第一位是SMOD與波特率的倍數有關
- TH1=0XF3; //計數器初始值設置,波特率是2400的
- TL1=0XF3;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- LCD_init(); //LCD1602顯示屏初始化
- }
- //*********************************蜂鳴器響應函數***********************************
- void beepx(){
- beep=0;
- delay(10000);
- beep=1;
- }
- //************************數據發送函數*********************
- void sendchar(){
- TI = 0;
- SBUF = an;
- while(!TI); //等待發送數據完成
- TI = 0;
- }
- //********************************窗口工作選擇**************************
- void Win_sel(){
- if(btn1 == 0){
- delay(1000);
- if(btn1 == 0){
- if(receiveData>an){
- an++;
- an_1 = an;
- LCD_row(2);
- LCD_DispString("num:");
- LCD_disp_char(2, 6, an_1 / 10 + '0');
- LCD_disp_char(2, 7, an_1 % 10 + '0');
- sendchar();
- }
- while(!btn1);
- delay(1000);
- }
- }
- else if(btn2 == 0){
- delay(1000);
- if(btn2 == 0){
- if(receiveData>an){
- an++;
- an_2 = an;
- LCD_row(2);
- LCD_DispString("num:");
- LCD_disp_char(2, 10, an_2 / 10 + '0');
- LCD_disp_char(2, 11, an_2 % 10 + '0');
- sendchar();
- }
- while(!btn2);
- delay(1000);
- }
- }
- else if(btn3 == 0){
- delay(1000);
- if(btn3 == 0){
- if(receiveData>an){
- an++;
- an_3 = an;
- LCD_row(2);
- LCD_DispString("num:");
- LCD_disp_char(2, 14, an_3 / 10 + '0');
- LCD_disp_char(2, 15, an_3 % 10 + '0');
- sendchar();
- }
- while(!btn3);
- delay(1000);
- }
- }
- }
- //*******************************串口模式************************
- void time1 (void) interrupt 4
- {
- if(RI == 1)
- {
- receiveData = SBUF;//出去接收到的數據
- RI = 0;//清除接收中斷標志位
- }
- }
- //*************************主函數*******************************
- int main(void){
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png (9.14 KB, 下載次數: 49)
下載附件
2021-5-6 20:59 上傳
所有資料51hei提供下載:
51單片機排隊叫號系統完整.zip
(32.22 KB, 下載次數: 79)
2021-5-6 19:18 上傳
點擊文件名下載附件
|