编译没有报错,运行的时候出现这个,代码如下,请高手指点:{取位函数}
function getbit(Number:Byte;nBit:Byte):Byte;
begin
Number:=Number shl 8-nbit;
Number:=Number shr 7;
getbit:=Number;
end;{设位函数}
function SetBit(Number:Byte;nBit:byte;value:byte):Byte;
begin
case value of
1:SetBit:=Number or (1 shl nBit-1);
0:SetBit:=Number and ((1 shl nBit-1) xor $FF);
end;
end;{取时间年,设置,发送到串口}
procedure TForm1.Button1Click(Sender: TObject);
var
i:Byte;
ch1,ch2,ch3,ch4:Byte;
vdate:TDateTime;
ayear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond:Word;
str:string;
begin
DecodeDateTime(vdate, AYear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond); for i:=3 to 8 do
SetBit(ch1,i,(getbit(Byte(ayear),i-2))); for i:=1 to 2 do
SetBit(ch1,i,(getbit(Byte(AMonth),i+2))); for i:=7 to 8 do
SetBit(ch2,i,(getbit(Byte(AMonth),i-6))); for i:=2 to 6 do
SetBit(ch2,i,(getbit(Byte(ADay),i-1))); SetBit(ch2,1,(getbit(Byte(AHour),5))); for i:=5 to 8 do
SetBit(ch3,i,(getbit(Byte(AHour),i-4))); for i:=1 to 4 do
SetBit(ch3,i,(getbit(Byte(AMinute),i+2))); for i:=7 to 8 do
SetBit(ch4,i,(getbit(Byte(AMinute),i-6))); for i:=1 to 6 do
SetBit(ch4,i,(getbit(Byte(AMilliSecond),i))); str:=Char($aa)+char($15)+char(ch1)+char(ch2)+char(ch3)+char(ch4);
Comm1.WriteCommData(PChar(@str[1]),6);
end;
function getbit(Number:Byte;nBit:Byte):Byte;
begin
Number:=Number shl 8-nbit;
Number:=Number shr 7;
getbit:=Number;
end;{设位函数}
function SetBit(Number:Byte;nBit:byte;value:byte):Byte;
begin
case value of
1:SetBit:=Number or (1 shl nBit-1);
0:SetBit:=Number and ((1 shl nBit-1) xor $FF);
end;
end;{取时间年,设置,发送到串口}
procedure TForm1.Button1Click(Sender: TObject);
var
i:Byte;
ch1,ch2,ch3,ch4:Byte;
vdate:TDateTime;
ayear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond:Word;
str:string;
begin
DecodeDateTime(vdate, AYear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond); for i:=3 to 8 do
SetBit(ch1,i,(getbit(Byte(ayear),i-2))); for i:=1 to 2 do
SetBit(ch1,i,(getbit(Byte(AMonth),i+2))); for i:=7 to 8 do
SetBit(ch2,i,(getbit(Byte(AMonth),i-6))); for i:=2 to 6 do
SetBit(ch2,i,(getbit(Byte(ADay),i-1))); SetBit(ch2,1,(getbit(Byte(AHour),5))); for i:=5 to 8 do
SetBit(ch3,i,(getbit(Byte(AHour),i-4))); for i:=1 to 4 do
SetBit(ch3,i,(getbit(Byte(AMinute),i+2))); for i:=7 to 8 do
SetBit(ch4,i,(getbit(Byte(AMinute),i-6))); for i:=1 to 6 do
SetBit(ch4,i,(getbit(Byte(AMilliSecond),i))); str:=Char($aa)+char($15)+char(ch1)+char(ch2)+char(ch3)+char(ch4);
Comm1.WriteCommData(PChar(@str[1]),6);
end;
解决方案 »
- delphi如何去得进程中的所有句柄.并关闭需要的对象!
- 怎么在delphi7中实现PDF文件的缩略图浏览?
- 关于来电显示
- 有关连接Microsoft Access时的出错信息
- 如何屏蔽网卡
- 看到有些朋友在找Delphi的MU窗口化代码 现在把它提供给大家
- 有谁知道,哪里有能看DELPHI程序写的软件用了哪些VCL控件的?
- 请问:如何将像ListView或者DataGrid等控件的某一项成为类似超链接
- Group Policy Objects注册项下面的随机的guid值怎么获取?
- 我的程序中对字体总是不满意,主要是不对齐,空格太短,对字体有何良策?
- 静态加载DLL时,出现语法错误在哪?GG没找到
- 有没有兄弟知道如何操作.mdx文件的
procedure TForm1.Button1Click(Sender: TObject);
var
i:Byte;
ch1,ch2,ch3,ch4:Byte;
vdate:TDateTime;
ayear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond:Word;
str:string;
begin
vdate := Now;
DecodeDateTime(vdate, AYear, AMonth, ADay, AHour, AMinute,ASecond, AMilliSecond); for i:=3 to 8 do
SetBit(ch1,i,(getbit(Byte(ayear),i-2))); for i:=1 to 2 do
SetBit(ch1,i,(getbit(Byte(AMonth),i+2))); for i:=7 to 8 do
SetBit(ch2,i,(getbit(Byte(AMonth),i-6))); for i:=2 to 6 do
SetBit(ch2,i,(getbit(Byte(ADay),i-1))); SetBit(ch2,1,(getbit(Byte(AHour),5))); for i:=5 to 8 do
SetBit(ch3,i,(getbit(Byte(AHour),i-4))); for i:=1 to 4 do
SetBit(ch3,i,(getbit(Byte(AMinute),i+2))); for i:=7 to 8 do
SetBit(ch4,i,(getbit(Byte(AMinute),i-6))); for i:=1 to 6 do
SetBit(ch4,i,(getbit(Byte(AMilliSecond),i))); str:=Char($aa)+char($15)+char(ch1)+char(ch2)+char(ch3)+char(ch4);
Comm1.WriteCommData(PChar(@str[1]),6);
end;