找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7103|回复: 10
收起左侧

怎么做,单片机用的普中科技的,写出程序来可以仿真,但放到单片机里却没反应

[复制链接]
ID:111430 发表于 2016-3-30 15:28 来自手机 | 显示全部楼层 |阅读模式
个人电脑与单片机的交互系统设计
要求:两者通过串口进行交互。在个人电脑上,
用串口助手软件发送自己的姓名到单片机,单片
机用液晶屏LCD1602横向移屏显示出来对应姓名
的汉语拼音和学号,并且单片机将对应的完整学
号返回到电脑显示。
回复

使用道具 举报

ID:111430 发表于 2016-3-30 15:34 来自手机 | 显示全部楼层
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD_DB P0
uchar dat0[]={"  gaoyankai  "};
uchar dat1[]={"  20132815859   "};
uchar table[6];
uchar sedtab[11]={"20132815859"};
uchar flag;                //显示标志位
uint num;
sbit LCD_RS=P2^0;  //端口可根据需要更改,以下同
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
//********US延时函数************
void delay_n40us(uint n)
{
        uint i;
        uchar j;
        for(i=n;i>0;i--)
                for(j=0;j<2;j++);
}
//********MS延时函数************
void delay(uint ms)
{
        uchar i;
        while(ms--)
        for(i=0;i<123;i++);
}
//********写指令函数************
void LCD_write_command(uchar com)
{
        LCD_DB=com;
        LCD_RS=0;//指令
        LCD_RW=0;//写入
        LCD_E=1;//允许
        LCD_E=0;
        delay_n40us(1);
}
//********写数据函数*************
void LCD_write_data(uchar dat)
{
        LCD_DB=dat;
        LCD_RS=1;//数据
        LCD_RW=0;//写入
        LCD_E=1;//允许
        LCD_E=0;
        delay_n40us(2);
}
//*******显示一个字符函数*********
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
        uchar address;
        if(y==1)
                address=0x80|x;
        else
                address=0xc0|x;
        LCD_write_command(address);
        LCD_write_data(dat);
}
void LCD_init()
{
        LCD_write_command(0x38);//设置 8位格式,2行,5x7
        LCD_write_command(0x0c);//整体显示,关光标,不闪烁
        LCD_write_command(0x06);//设定输入方式,增量不移位
        LCD_write_command(0x01);//清除屏幕显示
        delay_n40us(100);// 2ms
}
//在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//串口接收中断允许,发送中断禁止
void Uart_Init()        //串口初始化函数
{
        SCON=0x50;        //串口方式1 ,允许接收
        TMOD=0x20;        //T1工作于方式2
        PCON=0x00;  //波特率不倍增
        TL1=0xfd;   //波特率9600
        TH1=0xfd;   //波特率设置
        EA=1;       //开总中断
        ES=1;       //开串口接收中断
        TR1 = 1;    //定时器开启
}
void PutStr(uchar *pstr,uchar len)        //字符发送函数
{
        uchar i;
          for(i=0;i<len;i++)
          {
             SBUF=*pstr;
                 pstr++;
                 while(TI==0);
                 TI=0;
          }
}
//********主函数************
void main()
{
        uchar i,j,k;
        Uart_Init();        //串口初始化
        while(1)
        {
                  if(flag==0)                //液晶不显示
                {
                       
                }
                else
                {
                        LCD_init();        //液晶初始化
                        for(j=0;j<40;j++)
                          {
                                   LCD_write_command(0x1c);        //设置全屏左移
                                   for(i=0;i<16;i++)
                                   {                                                                         
                                    LCD_disp_char(i+16,1,dat0[i]);        //写入数据
                                    LCD_disp_char(i+16,2,dat1[i]);
                                   }
                                   delay(100);                 //延时
                          }
                        for(k=0;k<6;k++)         //清空接收数组
                        {
                                table[k]='0';
                        }
                        flag=0;        //标志位
                        num=0;          
                       
                }
        }
}
void Com() interrupt 4        //串口接受中断处理函数
{
        if(RI==0) return;         //如果没有接收中断标志,返回
        ES=0;            //关闭串口中断
        RI=0;        //清串行中断标志位
        table[num++] = SBUF;        //接收缓冲器中的字符
        if(table[0]==0xB8 && table[1]==0xDF && table[2]==0xD1 && table[3]==0xE5 && table[4]==0xBF && table[5]==0xAD)        //读取初始状态
        {
                flag=1;        //显示
                PutStr(sedtab,11);         //发送学号
        }
        else
        {
                flag=0;        //不显示                  
        }
        ES=1;                 //开启串口中断
}
回复

使用道具 举报

ID:111430 发表于 2016-3-30 15:35 来自手机 | 显示全部楼层
老凯哥 发表于 2016-3-30 15:34
#include
#define uint unsigned int
#define uchar unsigned char

单片机为什么没反应,其他的单片机可以用
回复

使用道具 举报

ID:111420 发表于 2016-3-30 15:47 | 显示全部楼层
老凯哥 发表于 2016-3-30 15:35
单片机为什么没反应,其他的单片机可以用

端口有没有设置对
回复

使用道具 举报

ID:104472 发表于 2016-3-30 16:02 | 显示全部楼层
要想传输正确,需要具备的就是端口,波特率,字节数,校验位等。
回复

使用道具 举报

ID:111440 发表于 2016-3-30 16:21 | 显示全部楼层
程序能仿真应该没什么问题   你可能是板子上的端口没对应  
回复

使用道具 举报

ID:109833 发表于 2016-3-30 16:23 | 显示全部楼层
需要设置好端口和波特率。
回复

使用道具 举报

ID:111430 发表于 2016-3-30 16:32 来自手机 | 显示全部楼层
2230866464 发表于 2016-3-30 16:21
程序能仿真应该没什么问题   你可能是板子上的端口没对应

不知道对应的端口是什么,普中科技的
IMG_20160330_162938.jpg
回复

使用道具 举报

ID:111455 发表于 2016-3-30 17:17 | 显示全部楼层
123go 发表于 2016-3-30 15:47
端口有没有设置对

有没有生成hex文件,
回复

使用道具 举报

ID:111430 发表于 2016-3-30 18:56 来自手机 | 显示全部楼层
51大神 发表于 2016-3-30 17:17
有没有生成hex文件,

生成了
回复

使用道具 举报

ID:72781 发表于 2016-3-30 22:49 | 显示全部楼层
table[num++] = SBUF; 这个语句是不是要放在循环中,只接收一个字符吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表