久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2383|回復: 2
打印 上一主題 下一主題
收起左側

單片機串口通信程序問題

[復制鏈接]
跳轉到指定樓層
樓主
20黑幣
我寫的一個程序,用串口助手向單片機發送三個10進制數如圖,然后取數顯示在LCD1602上,為什么不行呢 大家幫我看下
#include<stc12.h>//頭文件
unsigned int date[3],num;
unsigned int value;
#include<intrins.h>

sbit RS = P1^0;   //定義端口
sbit RW = P1^1;
sbit EN = P2^5;
sbit DU = P2^0;
sbit WE = P2^1;

#define RS_CLR RS=0
#define RS_SET RS=1

#define RW_CLR RW=0
#define RW_SET RW=1

#define EN_CLR EN=0
#define EN_SET EN=1

#define DataPort P0


/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{

while(t--)
{
     //大致延時1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}
/*------------------------------------------------
              判忙函數
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
              寫入命令函數
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{  
while(LCD_Check_Busy()); //忙則等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
              寫入數據函數
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙則等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}

/*------------------------------------------------
                清屏函數
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}

/*------------------------------------------------
              初始化函數
------------------------------------------------*/
void LCD_Init(void)
{
   LCD_Write_Com(0x38);    /*顯示模式設置*/
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*顯示關閉*/
   LCD_Write_Com(0x01);    /*顯示清屏*/
   LCD_Write_Com(0x06);    /*顯示光標移動設置*/
   DelayMs(5);
   LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
   }


void UartConfiguration()
{
        
        SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //設定定時器1為16位自動重裝方式
        TL1 = 0xE0;                //設定定時初值
        TH1 = 0xFE;                //設定定時初值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1
        }
void main()
{
        cmg88();//關數碼管,點陣函數
LCD_Init();
LCD_Clear();//清屏
  UartConfiguration();
         
        while(1)                                                //死循環
        {
    value=date[3]*100+date[2]*10+date[1]*1;

        //        value=500;
                 LCD_Write_Com(0x8c);
          LCD_Write_Data(        value/100+0x30) ; // 百位
                LCD_Write_Data(        value/10%10+0x30) ;//百位
                LCD_Write_Data(        value%10+0x30) ;   //十位

}
        }

void Uart() interrupt 4
{
        if(RI)
        {
               
                date[num++]=SBUF;
                if(num>=3)
                {
                num=0;
                }
                RI=0;
        }
}

IMG_20181212_115421.jpg (3.33 MB, 下載次數: 58)

IMG_20181212_115421.jpg

最佳答案

查看完整內容

unsigned char date[3]; bit flag=0; /***************************/ void main() { ......... while(1) { if(flag==1) { ES=0; //關串口中斷 flag=0; value=date[2]*100+date[1]*10+date[0]; ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2018-12-13 10:54 | 只看該作者
本帖最后由 wulin 于 2018-12-19 16:57 編輯

unsigned char date[3];
bit flag=0;
/***************************/
void main()                                       
{
        .........
        while(1)  
        {
                if(flag==1)
                {
                        ES=0;                        //關串口中斷
                        flag=0;
                        value=date[2]*100+date[1]*10+date[0];
                        ...........
                        ES=1;                //開串口中斷


/******************************/
void Uart() interrupt 4
{
        static unsigned char num=0;//靜態計數變量
        RI=0;                                        //接收中斷請求標志位清0        
        date[num]=SBUF;                //接收到的數據串保存在緩存數組
        num++;
        if(num>=3)
        {
                flag=1;                                //接收完成標志置1
                num=0;                                //計數變量清0
        }
}

回復

使用道具 舉報

板凳
ID:348408 發表于 2018-12-18 23:19 | 只看該作者
LCD1602有顯示 ?是亂碼還是?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂视频一区 | 91视频日本| 日韩欧美在线免费观看视频 | 免费在线视频一区二区 | 国产精品美女久久久久久久久久久 | 婷婷中文字幕 | 精品日韩一区二区 | 操操日| 成人在线视频免费观看 | av一区二区三区 | 亚洲男人天堂av | 国产成人精品一区二区三区网站观看 | 久久久久久久夜 | 男人天堂社区 | 91欧美| 国产三级国产精品 | 久久精品小短片 | 久久综合一区二区三区 | 羞羞视频免费观 | 91精品久久久久久久99 | 亚洲一级黄色 | 99re热精品视频 | 最近日韩中文字幕 | 国产第一页在线播放 | 久久久精 | 中文字幕日韩一区 | 毛片一区二区三区 | 国外成人免费视频 | 美女黄网站 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 狠狠插狠狠操 | 亚洲一区二区精品视频 | 精品国产精品国产偷麻豆 | 在线国产小视频 | 国产一区二区在线视频 | 久久久久国产精品免费免费搜索 | 青青草综合网 | 久久久精品一区二区三区 | 久久婷婷av | 日韩午夜影院 | 成人在线影视 |