用Delphi实现上位机与单片机串行通信源代码及效果图Word文件下载.docx
- 文档编号:15930967
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:15
- 大小:84.14KB
用Delphi实现上位机与单片机串行通信源代码及效果图Word文件下载.docx
《用Delphi实现上位机与单片机串行通信源代码及效果图Word文件下载.docx》由会员分享,可在线阅读,更多相关《用Delphi实现上位机与单片机串行通信源代码及效果图Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
sbitdq=P3^3;
//温度输入口
ucharch;
ucharcrc;
//***温度小数部分用查表法*********//
uchardataRomCode[8]={
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00
};
ucharcodeditab[16]={
0x00,0x01,0x01,0x02,
0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,
0x08,0x08,0x09,0x09
};
/*ucharcodedis_7[12]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0xff,0xbf
*/
ucharcodedis_7[12]={
0x28,0xEE,0x32,0xA2,
0xE4,0xA1,0x21,0xEA,
0x20,0xA0,0xff,0xF7};
//共阴极LED段码表"
0"
"
1"
2"
3"
4"
5"
6"
7"
8"
9"
不亮"
-"
ucharcodestr[12]={
'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
'
9'
'
'
-'
//ucharcodescan_con[4]={0x04,0x08,0x10,0x20};
//列扫描控制字,P3.2P3.3P3.4P3.5
//0x04化成二进制就是00000100
//0x08化成二进制就是00001000
//0x10化成二进制就是00010000
//0x20化成二进制就是00100000
//0x40化成二进制就是01000000
//0x80化成二进制就是10000000
uchardatatemp_data[2]={0x00,0x00};
//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
//显示单元数据,共4个数据,一个运算暂存用
//串口初始化晶振为11.0592M方式1波特率300-57600
voidInitCom(void)
{
#defineXTAL11059200//CUP晶振频率
#definebaudrate9600//通信波特率
TMOD=0x20;
//定时器1方式2定时器0方式1
//用在别处可以不用定时器0,TMOD=0x20
TH1=TL1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));
//THTL;
SCON=0x50;
//串口方式1,允许接收
//TCON=0x40;
//设定时器1开始计数
//PCON=0x80;
//波特率加倍控制,SMOD位
PCON=0x00;
RI=0;
//清收发标志
TI=0;
IE=0x90;
//0x00=禁止任何中断,0x90开启T1中断,0x92开启全部中断
TR1=1;
//启动定时器1
}
//向串口输出一个字符(非中断方式)
voidComOutChar(unsignedcharOutData)
SBUF=OutData;
//输出字符
while(!
TI);
//空语句判断字符是否发完
TI=0;
//清TI
//串口接收中断函数
voidserial()interrupt4//using3
if(RI)
{
RI=0;
ch=SBUF;
}
//****11微秒延时函数*********************//
voiddelay(uintt)
for(;
t>
0;
t--);
//***********显示扫描函数*************//
voidscan(void)
chark;
for(k=0;
k<
4;
k++)//四位LED扫描控制从左到右
{
Disdata=dis_7[display[k]];
//discan=scan_con[k];
switch(k)
{
case0:
LED_1=0;
break;
case1:
LED_2=0;
DIN=0;
case2:
LED_3=0;
case3:
LED_4=0;
default:
}
delay(100);
//scan_con-列扫描控制字;
//discan-P3口列扫描输出
//discan=0x00;
//灭字
switch(k)
LED_1=1;
LED_2=1;
LED_3=1;
LED_4=1;
//******18B20复位函数***********//
voidInit_DS18B20(void)
charpresence=1;
while(presence)
while(presence)
DQ=1;
_nop_();
//总线上拉
DQ=0;
//下拉
delay(50);
//维持550us,最短维持480us
delay(6);
//检测总线上升沿,66us
presence=DQ;
//DS18B20发存在低电平信号(60-240us);
presence=0继续下一步
delay(30);
//延时300us,总线恢复高电平,DQ=1;
presence=~DQ;
//取反,跳出循环
DQ=1;
//****18B20写命令函数************//
voidWriteOneChar(ucharval)
uchari;
for(i=8;
i>
i--)//定义8bit,写8bit
DQ=1;
_nop_();
DQ=0;
//5us
DQ=val&
0x01;
//最低位移出,并写入总线
delay(6);
//66us
val=val>
>
1;
//右移一位,倒数第二位变为最低位
DQ=1;
delay
(1);
//高电平维持11us,写结束
//*******18B20读1个字节函数*********************//
ucharReadOneChar(void)
ucharvalue=0;
for(i=8;
i>
0;
i--)
value>
=1;
//右移一位
DQ=0;
//4us
DQ=1;
//4us,读时隙
if(DQ)
value|=0x80;
//DQ=1,则写入为10000000
return(value);
/**************************************/
/**/
/*读取64位序列码*/
voidRead_RomCord(void)
ucharj;
Init_DS18B20();
WriteOneChar(0x33);
//读序列码的操作
for(j=0;
j<
8;
j++)
RomCode[j]=ReadOneChar();
/******************************************/
/*DS18B20的CRC8校验程序*/
ucharCRC8(void)
uchari,x;
ucharcrcbuff;
crc=0;
for(x=0;
x<
x++)
crcbuff=RomCode[x];
for(i=0;
i<
i++)
if(((crc^crcbuff)&
0x01)==0)
crc>
else
{
crc^=0x18;
//CRC=X8+X5+X4+1
crc|=0x80;
}
crcbuff>
returncrc;
//*********读出温度函数****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 实现 上位 单片机 串行 通信 源代码 效果图