打印

求助高手:单片机键盘显示+PC机通信

[复制链接]
1750|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yy温控|  楼主 | 2009-10-13 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yy温控 于 2009-10-14 11:53 编辑

求助高手:键盘显示+通信程序下面是关于键盘显示的主程序:
用7289芯片控制的,总共5个按键。下面的程序硬件通过了。
我现在想在这个程序中加上和PC机通信的程序,用的485通信
PC机输入的指令相当于按键的功能。
求各位高手看看应该怎么加通信程序!!
我应该怎么加上通信程序呢?用什么方法好?
望大家给予宝贵意见!!
高手最好给点程序,谢谢!!
感激不尽!
#include <reg51.h>
#include <intrins.h>
#include "12.h"
#define uchar unsigned char
#define uint  unsigned int
sbit P20=P2^0;
sbit P10=P1^0;
void InitSerial()
{
  SCON=0x50;
  TMOD=TMOD|0X20;
   TH1=0XFD;
   TL1=0XFD;
   TR1=1;
}
void main()
{
unsigned char temp;
uchar key;
uchar kk=0;
uchar enter=0;
uchar k08=0;
uchar k10=0;
uchar tx=1;
    InitSerial();
ZLG7289_Init();
P10=1;
ZLG7289_Hide(0xfc);
ZLG7289_Down_Data(0x02,0x02,0,0x05);
ZLG7289_Down_Data(0x02,0x03,0,0x0A);
    P20=0;
while(1)
{
      if(ZLG7289_INT==0)
    {
      key=ZLG7289_ReadKey();
  if(key==0x18)
   {
    disp08();ZLG7289_Hide(0x0c);ZLG7289_Glint(0x00);enter=0;
    k08=1;k10=0; key=0;kk=0; tx=0;
   }
   if(key==0x19)
   {  
      ZLG7289_Hide(0xfc); disp10();key=0;k10=1;
   k08=0;ZLG7289_Glint(0x00);kk=0; enter=0; tx=0;
   }
   if(key==0x1a)
   {
     key=0;
   tx=0;
   if(k08==1)
   {
   if(kk>=2){kk=1;}
   else
   kk++;
    if(kk==1)
  {
  disp1();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);enter=0; tx=0;
          }
  if(kk==2)
  {
  disp2();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);tx=0;
    enter=0;}
    }
    if(k10==1)
    {  
     if(kk>=2){kk=1;}
   else
   kk++;
  
    if(kk==1)
  {
  disp1();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);enter=0;
          }
  if(kk==2)
  {
  disp2();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);
    enter=0;}  
    }
   }
   if(key==0x1b)
   {   
    key=0;
  tx=0;
  if(k08==1)
  {
  if(kk<=1){kk=2;}
  else
  kk--;
  if(kk==1)
  {  
  disp1();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);
    enter=0;}
  if(kk==2)
  {
  disp2();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);
    enter=0;}
    }
    if(k10==1)
    {
     if(kk<=1){kk=2;}
  else
  kk--;
  if(kk==1)
  {  
  disp1();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);
    enter=0;}
  if(kk==2)
  {
  disp2();ZLG7289_Hide(0xfe);ZLG7289_Glint(0x00);
    enter=0;}
    }
   }
   if(key==0x1c)
   {
    enter=1;key=0;ZLG7289_Glint(0xff);tx=0;
   }
    while(!ZLG7289_INT);
   
   }
}
      
}   


相关帖子

沙发
gooogleman| | 2009-10-14 08:25 | 只看该作者
这个和RS232 类似的。www.pudn.com有蛮多代码例子的。

使用特权

评论回复
板凳
awmc_m| | 2009-10-14 08:34 | 只看该作者
没看到哪里开了定时器中断。

使用特权

评论回复
地板
yy温控|  楼主 | 2009-10-14 10:41 | 只看该作者
3# yyy71cj
呵呵,我是个新手,很多知识都没运用到实践当中

我的死循环程序那么长,功能就是判断是否有键按下,有就执行。
那我在死循环怎么加上通信程序啊

使用特权

评论回复
5
yy温控|  楼主 | 2009-10-14 10:43 | 只看该作者
4# awmc_m
这只是主程序文件,还有别的程序,我都加到一个项目当中了。

使用特权

评论回复
6
yy温控|  楼主 | 2009-10-14 11:25 | 只看该作者
3# yyy71cj
大侠,太不好意思了,我没用到中断,用的是查询方式

你能帮我在死循环里加上通信程序吗?
给点建议也行

使用特权

评论回复
7
cyj0501| | 2009-10-14 16:00 | 只看该作者
:victory:

使用特权

评论回复
8
yy温控|  楼主 | 2009-10-17 14:41 | 只看该作者
[img][/img]

使用特权

评论回复
9
yy温控|  楼主 | 2009-10-17 14:43 | 只看该作者
D:\My Documents\My Pictures\3.jpg

使用特权

评论回复
10
awmc_m| | 2009-10-17 22:46 | 只看该作者
本帖最后由 awmc_m 于 2009-10-17 22:50 编辑
3# yyy71cj  
呵呵,我是个新手,很多知识都没运用到实践当中

我的死循环程序那么长,功能就是判断是否有键按下,有就执行。
那我在死循环怎么加上通信程序啊 ...
yy温控 发表于 2009-10-14 10:41


定时器中断服务程序()//10MS
{
       按键扫描标志=1;
}

串口接收中断程序()
{
       接受数据暂存;
}

while(1)
{
      if(按键扫描标志)
          {
                读取键值;
                按键扫描标志=0;
                按键标志=1;
           }
       if(按键标志)
          {
              按键标志=0;
              按键处理;
           }
       串口发送函数();
}

使用特权

评论回复
11
yy温控|  楼主 | 2009-10-19 09:27 | 只看该作者
谢谢这位大侠! 11# awmc_m

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

71

帖子

0

粉丝