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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2948|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

急需,求助通過51單片機串口接受一段數(shù)字處理后按特點格式在LCD上顯示,畢設(shè)馬上要交

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:205975 發(fā)表于 2017-5-30 03:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我的畢業(yè)設(shè)計市有關(guān)數(shù)顯的,我學的是機械,對這個單片機不是很清楚啊。我整了很久還是沒調(diào)試出來。有哪位大神能幫我解決一下嗎。有償?shù)模瑑r格合理都行。會做的請聯(lián)系我QQ:409110616,電話18875026689  
下面我說一下具和我完成的進度,肯定有很多錯誤。
主要針對時柵位移傳感器的外置式數(shù)顯裝置,擬設(shè)計一個時柵傳感器數(shù)顯裝置,該系統(tǒng)以單片機作為控制核心,可以通過串行接口接收到的傳感器控制電路輸出的傳感器測量數(shù)據(jù),能夠?qū)r柵傳感器測量數(shù)據(jù)進行度、分、秒格式顯示,并且能夠設(shè)置顯示方向。大概就是用利用串口輸入一段數(shù)字信號,經(jīng)過單片機處理后顯示出來。顯示格式為“多少°多少′多少″”的形式。我選用的是stc89c51單片機,還有l(wèi)cd1602顯示器,和幾個按鍵功能,設(shè)置方向(原來數(shù)據(jù)的補碼,按360°算),(還有設(shè)置分別用角度、分度、秒度顯示,可帶小數(shù)點,這個不強行要求)用C語言編寫。下面是我做的一些。這關(guān)系能否順利畢業(yè),請各位大神幫幫我。
proteus仿真圖

源程序如下,只完成主要的部分,還不能正確顯示:
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define yh 0x80 //LCD第一行的初始位置
#define er 0x80+0x40 //LCD第二行初始位置

sbit pd_key=P1^0;   //+方向鍵 K0
sbit nd_key=P1^1;    //-方向鍵 K1
sbit pa_key=P1^2;    //+角度鍵 K2
sbit na_key=P1^3;   //-角度 K3
sbit pp_key=P1^4;      //+分 K4
sbit np_key=P1^5;    //-分 K5
sbit ps_key=P1^6;      //+秒 K6
sbit ns_key=P1^7;    //-秒 K7
sbit rs=P2^0;   
sbit en=P2^2;   
unsigned char shiZ,check;
uchar code tab1[]={"    2017.6.7    "};//顯示的固定字符
uchar code tab2[]={"LOC:    °  ′  ″"};//顯示的固定字符
uchar tate[7];
uchar bian[8];
uchar temp,a;
uchar flag;
/*LED_Buffer[7]用來存儲串口發(fā)送的數(shù)據(jù),com_dat用來記錄串口發(fā)送的個數(shù)*/
uchar LED_Buffer[7], *q, com_dat;      //從串口接收的數(shù)據(jù)
/***********延時程序***********/
void delay(uint z)       //延時函數(shù)                       
{
    uint x,y;  
    for(x=z;x>0;x--)
        for(y=122;y>0;y--);
}
void delay_10us()        //延時10us
{
  uchar i;
  i--;i--;i--;i--;i--;i--;
}

/****液晶寫入指令函數(shù)****/
void write_1602com(uchar com)
{      
rs=0;          //數(shù)據(jù)/指令選擇置為指令
P0=com;        //送入數(shù)據(jù)
delay(5);      //延時一小會兒,讓1602準備接收數(shù)據(jù)
en=1;          //拉高使能端,為制造有效的下降沿做準備
en=0;          //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

/***液晶寫入數(shù)據(jù)函數(shù)****/
void write_1602dat(uchar dat)
{
rs=1;          //數(shù)據(jù)/指令選擇置為數(shù)據(jù)
P0=dat;        //送入數(shù)據(jù)
delay(5);      //延時一小會兒,讓1602準備接收數(shù)據(jù)
en=1;          //en置高電平,為制造下降沿做準備
en=0;          //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

/***液晶初始化函數(shù)****/
void lcd_init() //LCD初始化子程序
{      

write_1602com(0x38);   //顯示模式設(shè)置:顯示16×2,5×7點陣,選用8位數(shù)據(jù)接口  
delay(5);         
write_1602com(0x38);  
delay(5);         //延時5ms
write_1602com(0x38);      //3次寫 設(shè)置模式  
delay(5);   
write_1602com(0x0c);     //顯示設(shè)置:顯示打開,有光標閃爍  
delay(5);  
write_1602com(0x06);     //顯示設(shè)置:字符不移動,光標向右移動
delay(5);                  
write_1602com(0x01);     //清屏指令:將以前的顯示內(nèi)容清除  
delay(5);
write_1602com(er+0);
for(a=0;a<15;a++)
  {
   write_1602dat(tab2[a]);
  }
write_1602com(yh+0);
for(a=0;a<15;a++)
  {
   write_1602dat(tab1[a]);
  }      
}
/*****************串口輸入數(shù)字信號函數(shù)******************/
void uart_init()
{

TMOD = 0x20;   //定時器工作在定時器1的方式2      
PCON = 0x00;   //不倍頻      
SCON = 0x50; //串口工作在方式1,并且啟動串行接收      
TH1 = 0xFd;    //設(shè)置波特率 9600      
TL1 = 0xFd;      
TR1 = 1;  //啟動定時器1   
ES = 1;  //開串口中斷   
EA = 1;  //開總中斷

}
void serial() interrupt 4   // 串口中斷服務(wù)函數(shù)

{
   EA = 0;
    if(RI == 1)   //當硬件接收到一個數(shù)據(jù)時,RI會置位
    {  

          LED_Buffer[com_dat] = SBUF;   //把從串口讀出的數(shù)存到數(shù)組
          RI = 0;
          com_dat++;  
          if(com_dat == 7) com_dat = 0;  //當com_dat = 7時,清0,防止數(shù)組溢出
    }   
          EA = 1;
}

/**********處理讀到的數(shù)字信號數(shù)據(jù)******************/
void pro_value()
{
temp=LED_Buffer[0]+LED_Buffer[1]+LED_Buffer[2]+LED_Buffer[3]+LED_Buffer[4]+LED_Buffer[5]+LED_Buffer[6];
shiZ=temp;
bian[0]=shiZ/3600;      //將角度取整
tate[0]=bian[0]/100;          //將角度百分位分離
bian[1]=tate[0]%100;          
tate[1]=bian[1]/10;                //將角度十分位分離                 
tate[2]=bian[1]%10;                  //將角度個位分離
write_1602com(er+5);
for(a=0;a<3;a++)
{
   write_1602dat(tate[a]+0x30);
}
bian[2]=shiZ/60;        //將分度取整
bian[3]=bian[2]%60;
tate[3]=bian[3]/10;                //將分度十分位分離
tate[4]=bian[3]%10;                //將分度個位分離
write_1602com(er+9);
for(a=3;a<5;a++)
{
   write_1602dat(tate[a]+0x30);
}
bian[4]=shiZ%60;                  //將秒度取整
tate[5]=bian[4]/10;                //將秒度十分位分離
tate[6]=bian[4]%10;                //將秒度個位分離
write_1602com(er+12);
for(a=5;a<7;a++)
{
   write_1602dat(tate[a]+0x30);
}
}


void nd_data()                        //反方向顯示
{
bian[5]=360-bian[0];
if(bian[2]==0,bian[4]==0)
  {
   bian[5]=bian[5];
  }
else
  {
   bian[5]=bian[5]-1;
  }
tate[0]=bian[5]/100;   //將角度百分位分離
bian[1]=tate[0]%100;          
tate[1]=bian[1]/10;          //將角度十分位分離                 
tate[2]=bian[1]%10;          //將角度個位分離
write_1602com(er+5);
   for(a=0;a<3;a++)
  {
   write_1602dat(tate[a]+0x30);
  }
bian[6]=60-bian[2];
if(bian[4]==0)
  {
   bian[6]=bian[6];
  }
else
  {
   bian[6]=bian[6]-1;
  }
tate[3]=bian[6]/10;                //將分度十分位分離
tate[4]=bian[6]%10;                //將分度個位分離
write_1602com(er+9);
   for(a=3;a<5;a++)
  {
   write_1602dat(tate[a]+0x30);
  }
bian[7]=60-bian[4];
tate[5]=bian[7]/10;                //將秒度十分位分離
tate[6]=bian[7]%10;                //將秒度個位分離
write_1602com(er+12);
for(a=5;a<7;a++)
{
   write_1602dat(tate[a]+0x30);
}
}  

void display1()     //設(shè)置顯示
{
  pro_value();
}

void display2()     //設(shè)置顯示反方向
{
  nd_data();
}

void key_caa()
{
if(pd_key==0)   
  {
    delay(10);
   if(pd_key==0)
   {   
    display1();
    while(pd_key==0);
   }
  }
if(nd_key==0)         
  {
    delay(10);
   if(nd_key==0)
   {
    display2();
    while(nd_key==0);
   }
  }
}

/**********主函數(shù)******************/
void main()
{
lcd_init();

uart_init();
  while(1)  
  {
    pro_value();
    key_caa();        
  }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:205975 發(fā)表于 2017-5-30 11:57 | 只看該作者
自頂一下!急啊
回復(fù)

使用道具 舉報

板凳
ID:82765 發(fā)表于 2017-5-30 12:24 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

地板
ID:192323 發(fā)表于 2017-5-30 15:10 | 只看該作者
做出來了嗎,沒有做出來加qq1097289917
回復(fù)

使用道具 舉報

5#
ID:160980 發(fā)表于 2017-5-30 15:34 | 只看該作者
接收什么樣子的數(shù)字?
回復(fù)

使用道具 舉報

6#
ID:205975 發(fā)表于 2017-5-30 16:11 | 只看該作者
zhoulin01 發(fā)表于 2017-5-30 15:34
接收什么樣子的數(shù)字?

一串數(shù)字,比如45123。用它除以3600為°上的數(shù)據(jù)。最大為360*60*60=1296000
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久草在线视频中文 | 99re6在线视频精品免费 | 日本欧美在线 | 午夜影院在线观看视频 | 在线看91| 日韩一区二区三区视频 | 亚洲人在线 | 色妹子综合网 | 91精品国产乱码久久久久久久久 | 啪啪毛片 | 一区在线观看 | 日韩电影a| 亚洲国产精品一区二区三区 | 久久美女网| 久久51 | 亚洲欧美aⅴ | 欧美精品1区2区 | 国产高清一区二区 | 国产一区二区影院 | 日本高清视频在线播放 | 日韩男人天堂 | 国产一区二区三区四区 | 亚洲精品自拍 | 欧美高清dvd | 祝你幸福电影在线观看 | a级在线免费视频 | 久久亚洲一区二区 | 中文字幕免费视频 | 日韩欧美一区二区三区 | 成人精品久久久 | 九色一区 | 精品视频一区二区三区在线观看 | 国产一级电影在线观看 | 在线观看视频一区 | 国产精品久久久久久久久久免费 | 亚洲午夜视频 | 91婷婷韩国欧美一区二区 | 久久国产精品久久久久久 | 在线视频三区 | 欧美激情综合 | 操操操操操 |