找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

基于AVR128單片機(jī)智能傳送裝置程序與原理圖設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一、系統(tǒng)方案
1、板載可變電阻(電位器)R29的電壓作為處理器ATmega128的模數(shù)轉(zhuǎn)換模塊中單端ADC0的模擬信號(hào)輸入(跳線JP13短接)。
2、調(diào)節(jié)電位器,將改變AD轉(zhuǎn)換接口ADC0的模擬信號(hào)輸入,由處理器完成ADC0的A/D轉(zhuǎn)換。
3、將處理器通過(guò)A/D轉(zhuǎn)換后得到的電壓信號(hào)來(lái)模擬“貨物”的重量。假定轉(zhuǎn)換得到的電壓信號(hào)與“貨物”重量具有線性關(guān)系,例:電壓2.5V時(shí),貨物重量為500kg,電壓為0V時(shí),傳送裝置空載。
4、將轉(zhuǎn)換得到的電壓及對(duì)應(yīng)的“貨物”重量通過(guò)7段數(shù)碼管LED或液晶顯示屏或PC串口顯示。
5、使用板載4*4矩陣鍵盤中的四個(gè)按鍵號(hào)分別為A-D的4個(gè)按鍵和8個(gè)發(fā)光二極管D1-D8。
A鍵為傳送裝置啟動(dòng)按鍵,按下后,板載發(fā)光二極管D1亮,表示傳送裝置啟動(dòng)。
B鍵鍵為正向傳送控制鍵,在A啟動(dòng)后B才有效,B按下后,發(fā)光二極管D2-D8從左到右依次循環(huán)點(diǎn)亮,表示“傳送裝置”開(kāi)始正向傳送貨物。
C鍵為反向傳送控制鍵,同樣在A啟動(dòng)后才有效,C按下后,發(fā)光二極管D2-D8從右到左依次循環(huán)點(diǎn)亮,表示“傳送裝置”開(kāi)始反向傳送貨物。
D鍵為停止鍵,D按下后, “傳送裝置”停止工作,所有發(fā)光二極管全部熄滅。

二、硬件設(shè)計(jì)
原理圖如下:

三、單片機(jī)軟件設(shè)計(jì)
1、首先是系統(tǒng)初始化
void LCD12864_Init() //初始化液晶12864
{
    ResetLcd();
    SetScreenOnOff(0);
    delay_nus(2);
    SetPage(0);
    delay_nus(2);
    SetColum(0);
    delay_nus(2);
    SetRow(0);
    delay_nus(2);
    SetScreenOnOff(1);
}
2、液晶顯示程序
void SendCommand(unsigned char command)//給液晶寫入命令控制字
{
    CheckState();
    LGM12864_CLR_RS;  
    LGM12864_CLR_RW;
    LCDa_DO = command;
    delay_nus(2);
    LGM12864_SET_EN;
    delay_nus(2);
    LGM12864_CLR_EN;
}

unsigned char LCD12864_RecData()//液晶接收數(shù)據(jù)
{
    unsigned char temp;
    CheckState();
    LGM12864_SET_RS;
    LGM12864_SET_RW;
    LGM12864_SET_EN;
    temp=LCDa_DI;
    LGM12864_CLR_EN;

    return (temp);
}
3、按鍵程序
void key(void)//按鍵檢測(cè)
{
if((k1)==0)//開(kāi)始按鍵
{
delay_nms(10);
if((k1)==0)
{
led_start=1;led_0;
}
while((k1)==0);
}


if((k2)==0)//正轉(zhuǎn)
{
delay_nms(10);
  if((k2)==0)
  {
   if(led_start) fx=1;
   count=0;
  }
  while((k2)==0);
}

if((k3)==0)// 反轉(zhuǎn)
{
delay_nms(10);
  if((k3)==0)
  {
  if(led_start) fx=2;
  count=0;
  }
  while((k3)==0);
}
if((k4)==0)//停止
{
delay_nms(10);
  if((k4)==0)
  {
   led_start=0;led_1;
  }
  while((k4)==0);
}
}

4、核心算法程序
  #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0xFC; //reload counter high value
TCNT1L = 0x18; //reload counter low value
  num++;
  if(led_start)
  {
   if(fx==1) PORTB=table0[count];
         
   if(fx==2) PORTB=table1[count];
   if(num>300)
   {
   num=0;
   count++;
   count%=8;
   }
   
   
   
  }
  else
  {
PORTB=0xff;

  }
}        
四、proteus仿真設(shè)計(jì)
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒(méi)有硬件平臺(tái)的基礎(chǔ)上通過(guò)自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過(guò)軟件仿真來(lái)驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒(méi)有問(wèn)題,如果有問(wèn)題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問(wèn)題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開(kāi)發(fā)者帶來(lái)一定困惑,Proteus仿真軟件就很好的解決這個(gè)問(wèn)題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒(méi)問(wèn)題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表