基于单片机的多路数据采集系统设计毕业论文 联系客服

发布时间 : 星期一 文章基于单片机的多路数据采集系统设计毕业论文更新完毕开始阅读

sbit smgk=P2^7; uchar Pre_KeyNo=16,KeyNo=16; uchar code LEDData[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07, 0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79, 0X71} /*****延时子程序*****/ void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } /**************LED显示子程序***************/ void Display_Result(int d) { smgk=1; P0=0X7C; smgd=1; P0=LEDData[d/100]; //显示百位 Delay(5); smgd=0; smgk=0; smgk=1; P0=0X7D; smgd=1; P0=LEDData[d/10]; //显示十位 Delay(5); smgd=0; smgk=0; P0=0x7E; smgd=1; P0=LEDData[d]; //显示个位 Delay(5); smgk=0; smgd=0; smgk=1; P0=0X7C; smgd=1; P0=0x80; //显示小数点 Delay(5); smgd=0; smgk=0; } /************键盘扫描子程序**************/ 37 void Keys_Scan() { uchar Tmp,An; P3=0XF0; //低四位置1,放入4行 Delay(1); An=P3^0XF0; //按键后11110000将变成XXXX0000,X中有一个为0,3个仍为1,而异或操作会把3个1变成0,唯一的0变成1 Tmp=An>>4; //该表达式将高4位移到低四位 swith(Tmp) //判断按键发生在哪列 { case 1:KeyNo=0;break; case 2:KeyNo=1;break; case 4:KeyNo=2;break; case 8:KeyNo=3;break; default: KeyNo=16; //无键按下 } P3=0X0F; //高4位置0,放入4列 Delay(1); Tmp=P3^0xF0; // 按键后00001111将变成0000XXXX,X中有一个为0,3个仍为1,而异或操作会把3个1变成0,唯一的0变成1 switch(Tmp) //0—3行分别附加起始值0,4,8,12 { case 1:KeyNo+=0;break; case 2:KeyNo+=4;break; case 4:KeyNo+=8;break; case 8:KeyNo+=12;break; } } /********向串口发送数据子程序*********/ void putc_to_serialport(uchar C) { SBUF=C; while(T1==0); TI=0; } 38 Display() { smgK=1; P1=0X01; Smgd=1; P0=OXOF; } /*******主程序*******/ void main() { P0=0x00; SCON=0x50; //串口工作于方式1 TMOD=0x20; //T1工作于模式2 PCON=0x00; //波特率不加倍 TH1=0xFD; //波特率为9600 TL1=0xFD; TI=RI=0; TR1=1; //启动定时器1 IE=0x90; //允许串口中断 while(1) { Delay(100); if(P3!=0X0F) Keys_Scan(); swith(KeyNo) { case 0:putc_to_serialport(0X00); break; case 1:putc_to_serialport(0XF8); break; case 2:putc_to_serialport(0XF9); break; case 3:putc_to_serialport(0XFA); break; case 4:putc_to_serialport(0XFB); break; case 5:putc_to_serialport(0XFC); break; case 6:putc_to_serialport(0XFD); break; case 7:putc_to_serialport(0XFE); break; case 8:putc_to_serialport(0XFF); break; case 16:Display() 39 } } } /*******主机串口接受中断函数*********/ void Serial_INT() interrupt 4 { if(RI) { int i,j,m; long int n; uchar c; c=SBUF; i=c*0x05; j=i*0x10; n=j*0x10; m=n/0xFF; Display_Result(m); } 从机部分程序 # include #define uchar unsigned char #define uint unsigned int sbit ST=P3^2; sbit EOC=P3^6; sbit OE=P3^7; void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } /********向串口发送数据子程序********/ void putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0);TI=0; } /*********A/D转换子程序*********/ void Adcon() { int j,m=0XF8; uchar n; 40