delay();

RC1=0;

RC2=0;

RC0=1;

PORTB=shu[dis_data_bai];//百位送显

delay();

}

//键盘(线反转法)

void presskey()

{

uch line,column,key;

TRISD=0x07;

PORTD=0xf0;

column=PORTD & 0x07;//取列码

TRISD=0xf0;

PORTD=0x0f;

line=PORTD&0xf0;//取行码

key=line|column;//合成键值

if(key==0)keylock=0;//保证每次只按一次键

if(keylock==0)

{

if(key!=0)keylock=1;

switch(key)//查找键值

{

case 0x11:temp=3;flag++;break;

case 0x12:temp=2;flag++;break;

case 0x14:temp=1;flag++;break;

case 0x21:temp=4;flag++;break;

case 0x22:temp=5;flag++;break;

case 0x24:temp=6;flag++;break;

case 0x41:temp=9;flag++;break;

case 0x42:temp=8;flag++;break;

case 0x44:temp=7;flag++;break;

case 0x82:temp=0;flag++;break;

case 0x81:flag=4;send_usart();break;//发送

case 0x84:flag=0;data=0;break;//清零键

}

}

if(flag==1)//第一次按键

{

if(temp==0)flag=0;//若按0,则忽略

temp1=temp;

data=temp1;

}

if(flag==2)//第二次按键

{

temp2=temp;

data=temp1*10+temp2;//原来的个位变成十位

}

if(flag==3)//第三次按键

{

temp3=temp;

data=temp1*100+temp2*10+temp3;//原来的十位变成百位

flag=4;//屏蔽按键

}

}

//主程序

main()

{

init();

while(1)

{

presskey();

display(data);

}

}

4. 计算机控制软件

上位机软件是用VB编写的,功能很简单,主要有发送和接收两个功能。软件的界面如图5所示。

PIC单片机与PC机实现串行通信的设计

软件主要有2个“TextBox”,3个按钮,和一些文本控件组成。

现把所有程序都贴出来:

Private Sub Cmdquit_Click()

i = MsgBox(“您要离开吗?”, vbQuestion Or vbYesNo, “温馨提示”)

If i = 6 Then

Shell “explorer.exe http://blog.163.com/wujieflash”

End

End If

End Sub

Private Sub Cmdsend_Click()

If Len(Text1.Text) = 1 Then MSComm1.Output = “0” + “0” + Text1.Text ‘不满3位补足3位再发送

If Len(Text1.Text) = 2 Then MSComm1.Output = “0” + Text1.Text

If Len(Text1.Text) = 3 Then MSComm1.Output = Text1.Text

End Sub

Private Sub cmdzero_Click()

Text2.Text = “”

Text1.Text = “”

End Sub

Private Sub Form_Load()

MSComm1.Settings = “9600,n,8,1” ’设置数据传输率和发送字符格式