主从机之间的叫号取号串行通信,缺少头文件 求大神指导如何 编写?
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #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提供下载:
51单片机排队叫号系统完整.zip
(32.22 KB, 下载次数: 79)
|