• <menu id="w4oac"><noscript id="w4oac"></noscript></menu>
    <code id="w4oac"><abbr id="w4oac"></abbr></code>
    <delect id="w4oac"></delect>
  • 汕尾市人民醫(yī)院
    查看: 12478|回復(fù): 9
    打印 上一主題 下一主題

    發(fā)表幾個(gè)單位片機(jī)的程序,希望有感興趣的一起來(lái)學(xué)習(xí)!!

    [復(fù)制鏈接]
    跳轉(zhuǎn)到指定樓層
    1#樓主
    發(fā)表于 2011-5-29 21:37:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    8X8點(diǎn)陣的,本

    經(jīng)過(guò)發(fā)揚(yáng)堅(jiān)持不懈、不怕苦、不怕累的老一輩革命精神,8X24LED點(diǎn)陣終于成功點(diǎn)亮。并達(dá)到預(yù)期目標(biāo),將內(nèi)容從右到左滾動(dòng)顯示。

    電路結(jié)構(gòu):UDN2981A用于行掃描驅(qū)動(dòng),A6276SAX2用于列數(shù)據(jù)串行輸出,兩個(gè)可以驅(qū)動(dòng)四個(gè)8X8點(diǎn)陣,我只用了其中三組,下次再增加一個(gè),單片機(jī)用M8。

    程序如下:

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #define unchar unsigned char
    #define unint unsigned int
    #define OUT PORTD
    #define out_disable PORTB |= _BV(7)
    #define out_enable PORTB &= ~_BV(7)
    #define clk_int PORTB &= ~_BV(1)

    unchar cache[5];
    unchar column[][8]={
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         {0xF0,0x88,0x88,0xF0,0x88,0x88,0x88,0x0},// R
         {0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x0},//A
         {0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x0},// B
         {0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x0},//B
         {0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x0},//I
         {0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x0},//T

         {0x0,0x0,0x0,0x60,0x60,0x20,0x40,0x0},//
         {0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x0},//I
         {0,0,0,0,0,0},//
         {0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x0},//L
         {0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0},//O
         {0x88,0x88,0x88,0x88,0x88,0x50,0x20,0x0},//V
         {0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x0},//E
         {0,0,0,0,0,0},//
         {0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x00},//Y
         {0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0},//O
         {0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x0},//U
         {0x30,0x30,0x30,0x30,0x0,0x30,0x30,0x0},//
         {0x0,0x50,0xA8,0x88,0x50,0x20,0x0,0x0},//
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         {0,0,0,0,0,0},//
         };

    unchar dig,gen,ret,scan,line,wei,a,d,b,c,x;
    unint counter,shift;
    unchar t,temp,cl;

    //時(shí)鐘脈沖
    void clk()
    {
    PORTB |= _BV(1);

    PORTB &= ~_BV(1);
    }

    //鎖存
    void len()
    {
    PORTB |= _BV(2);

    PORTB &= ~_BV(2);
    }

    //發(fā)送數(shù)據(jù)高(1)
    void dat_h()
    {
    PORTB |= _BV(0);
    clk();
    }

    //發(fā)送數(shù)據(jù)低(0)
    void dat_l()
    {
    PORTB &= ~_BV(0);
    clk();
    }

    //延時(shí)
    void delay(unint time)
    {
    unint x,y;

    for (x=time; x>0; x--)
      for (y=1000; y>0; y--);
    }


    //初始化IO口及數(shù)據(jù)
    void io_int()
    {
    DDRD = 0xff;
    DDRB = 0xff;
    DDRC = 0xff;
    clk_int;
    // out_disable;
    OUT = 0;
    PORTC =0xff;
    scan = 0x01;
    }

    //行掃描
    void scan_re()
    {
    out_disable;
    len();
    OUT = scan;
    if (scan != 0x80)
      scan <<= 1;
      else scan = 0x01;
    out_enable;
    }

    //清屏
    void clear(unchar cle)
    {
      unchar c;
    for (c = cle;c>0; c--)
    {
      dat_l();
    }
    }

    //定時(shí)器初始化
    void time1_int()
    {
    TCCR1A = 0;
    TCCR1B |= _BV(0);
    TCNT1 = 0xf82f;
    TIMSK |= _BV(TOIE1);
    SREG = 0x80;//開(kāi)總中斷
    }

    //定時(shí)器1中斷服務(wù)程序
    ISR(TIMER1_OVF_vect)
    {
    PORTC = 0xaa;
    delay(100);
    PORTC = 0x55;
    delay(100);
    TIFR |= _BV(TOV1);
    }
    //發(fā)送列數(shù)據(jù)
    void send_data(unchar temp)
    {
    if ((temp&wei) == wei)
      dat_h();
    else
      dat_l();

    if (wei != 0x04)
      wei >>= 1;
      else wei = 0x80;
    }

    void display()
    {
    for (gen=0;gen<8; gen++)
    {
      dig = ret/6;
      x =ret%6;
      wei = 0x80;

      cache[0] = column[dig][gen];
      cache[1] = column[dig+1][gen];
      cache[2] = column[dig+2][gen];
      cache[3] = column[dig+3][gen];
      cache[4] = column[dig+4][gen];

      for (t=0;t<6; t++)//顯示第一個(gè)字
      {
       temp = cache[0];
       send_data(temp);
      }

      for (t=0;t<6; t++)//顯示第二個(gè)字
      {
       temp = cache[1];
       send_data(temp);
      }
      
      for (t=0;t<6; t++)//顯示第三個(gè)字
      {
       temp = cache[2];
       send_data(temp);
      }

      for (t=0;t<6; t++)//顯示第四個(gè)字
      {
       temp = cache[3];
       send_data(temp);
      }

      for (t=0;t<x; t++)//第五個(gè)字緩沖
      {
       temp = cache[4];
       send_data(temp);
      }

      scan_re();
    delay(6000);
    }
    }

    int main()
    {
    io_int();
    while (1)
    {
      display();
      counter++;
       if (counter == 20)
       {
        counter = 0;
        if (ret < 138)
         ret ++;
        else
        {
         ret = 0;
         dig = 0;
        }
       }
    }
    }

    樓主熱帖
    [文化天地] “賭”贏“相輸”
    [休閑生活] 這里能不能不單講火腿腸,講講電子DIY之類的
    [休閑生活] 郁可唯——幸福難不難
    [休閑生活] Robbie Williams - Better Men
    [休閑生活] 郭靜&范瑋琪&張韶涵 : 仨人
    [休閑生活] 范瑋琪——最初的夢(mèng)想

    2#狀元
     樓主| 發(fā)表于 2011-5-29 21:38:45 | 只看該作者
    點(diǎn)擊進(jìn)入微信
    /****************************************
    1602液晶頭文件
    RS => PD0
    RW => PD1
    EN => PD2

    D0-D3 NC

    D4 => PD3
    D5 => PD4
    D6 => PD5
    D7 => PD6
    ****************************************/

    #ifndef _LCD1602_H_
    #define _LCD1602_H_

    #include <avr/io.h>
    #include <util/delay.h>
    #define unchar unsigned char
    #define unint unsigned int

    //接口定義
    #define RS_COM PORTD &= ~_BV(PD0)
    #define RS_DAT PORTD |= _BV(PD0)
    #define RW_COM PORTD &= ~_BV(PD1)
    #define RW_REA PORTD |= _BV(PD1)
    #define E_HIG  PORTD |= _BV(PD2)
    #define E_LOW  PORTD &= ~_BV(PD2)
    #define DATA   PORTD
    #define word   PIND
    #define LCD_DDR DDRD

    //LCD接口方向初始化
    void lcdio_init()
    {
    LCD_DDR = 0xff;
    PORTD = 0;
    }

    //讀忙
    void busy()
    {
    RW_REA;
    RS_COM;
    E_HIG;
    LCD_DDR = 0X07;
    while((word&0x40));
    LCD_DDR = 0XFF;   
    }

    //使能信號(hào)上升沿
    void enable()
    {
    E_LOW;
    _delay_us(200);
    E_HIG;
    }

    //寫(xiě)命令D
    //因?yàn)镈7接的是PD6,所以才會(huì)有右移三位和左移1位。
    void write_com(unchar com)
    {
    RW_COM;
    RS_COM;
    DATA &= 0x07;
    DATA |= (com & 0xf0) >> 1;
    _delay_us(200);
    enable();

    DATA &= 0x07;
    DATA |= com <<3;
    _delay_us(200);
    enable();
    }

    //寫(xiě)數(shù)據(jù)
    void write_dat(unchar dat)
    {
    RW_COM;
    RS_DAT;
    DATA &= 0x07;
    DATA |= (dat & 0xf0) >> 1;
    enable();

    DATA &= 0x07;
    DATA |= dat << 3;
    enable();
    }

    //LCD初始化
    void lcd_init()
    {
    unchar t;
    _delay_ms(50);
    for (t=3; t>0;t--)
    {
      RS_COM;
      DATA &= 0x07;
      DATA |= 0X30 >> 1;
      enable();
      _delay_ms(5);
    }

    DATA &= 0x0f;
    DATA |= 0X20;
    enable();
    _delay_ms(5);

    write_com(0x28);
    busy();
    write_com(0x08);//
    busy();
    write_com(0x01);
    busy();
    write_com(0x0c);
    }


    //寫(xiě)位置,Y行,X列
    void write(unchar y,unchar x)
    {
    if (y == 1)
    {
      write_com(0x80+x-1);
    }
    else
    {
      if (y == 2)
      {
       write_com(0x80+0x40+x-1);
      }
    }
    }

    #endif
    3#榜眼
     樓主| 發(fā)表于 2011-5-29 21:40:22 | 只看該作者
    新浪官方微博
    /***********************************
    LED燈調(diào)光控制
    三段亮度可調(diào),首次按由暗變亮,二次為暗
    三次為亮,四次最亮,五次不斷郵亮變暗。
    六次按關(guān)閉

    芯片用的是ATtiny13A

    2011-01-26
    ***********************************/


    #include <avr/io.h>
    #include <util/delay.h>
    #define SW_NO ((PINB & 0x08) != 0x08)
    #define SW_OFF ((PINB & 0x08) == 0x08)
    #define unchar unsigned char
    #define unint unsigned int
    unchar t,key_data,c,k;

    //接口初始化
    void io_init(void)
    {
    DDRB = 0XFF;
    DDRB &= ~_BV(PB3);
    PORTB = _BV(PB3);
    }
    //PWM關(guān)閉
    void pwm_off(void)
    {
    TCCR0B = 0;
    TCCR0A = 0;
    }
    //PWM開(kāi)
    void pwm_no(void)
    {
    TCCR0B = 0x0a;
    TCCR0A = 0x23;
    }
    //PWM初始化
    void pwm_init()
    {
    TCCR0B = 0x0a;
    TCCR0A = 0x23;
    OCR0A = 255;  
    TCNT0 = 0;
    pwm_off();
    }

    //LED開(kāi)
    void led_no(unchar lumin)
    {
    OCR0B = lumin;
    pwm_no();   
    }
    //LED睡眠模式
    void led_sleep()
    {
    if (c<255)
    {
      led_no(c);
      _delay_ms(1);
      c ++;
    }
    else
    {
      c = 0;
    }

    }
    //LED首初打開(kāi)
    void led_first()
    {
    if (c<255)
    {
      led_no(c);
      c ++;
      _delay_ms(2);
    }
    }
    //按鍵程序
    unchar key(void)
    {

    if (SW_NO)
    {
      _delay_ms(10);
      
      if (SW_NO)
      {  
       if (key_data < 6)
       {
        key_data++;
       }
       else
       {
        key_data = 0;
       }
      }

    }
    while(SW_NO);

    return key_data;
    }

    int main()
    {
    pwm_init();
    io_init();
    while(1)
    {
      switch(key())
      {
       case 0: pwm_off();
         c = 0;
         break;

       case 1: led_first();
         break;
       
       case 2: led_no(51);
         break;

       case 3: led_no(170);
         break;

       case 4: led_no(255);
         break;

       case 5: led_sleep();
         break;

       default: pwm_off();
         c = 0;
         break;
      }
    }
    }
    4#探花
    發(fā)表于 2011-5-29 21:42:13 | 只看該作者
    提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
    5#進(jìn)士
    發(fā)表于 2011-5-29 21:55:38 | 只看該作者
    電子線路板??     估計(jì)壇友們看懂的不多
    6#貢士
    發(fā)表于 2011-5-29 22:17:56 | 只看該作者
    原代碼?
    7#舉人
     樓主| 發(fā)表于 2011-5-29 23:05:13 | 只看該作者

    RE: 發(fā)表幾個(gè)單片機(jī)的程序,希望有感興趣的一起來(lái)學(xué)習(xí)!

    whxvip 發(fā)表于 2011-5-29 21:42
    我承認(rèn)我沒(méi) 看懂!呵呵,能不能說(shuō)的淺顯點(diǎn)!例如什么叫片機(jī)

    我打錯(cuò)字了,應(yīng)該是單片機(jī)。
    8#秀才
     樓主| 發(fā)表于 2011-5-29 23:06:58 | 只看該作者
    whxvip 發(fā)表于 2011-5-29 21:42
    我承認(rèn)我沒(méi) 看懂!呵呵,能不能說(shuō)的淺顯點(diǎn)!例如什么叫片機(jī)

    單片機(jī)就是我們平時(shí)所聽(tīng)到的什么微電腦。微電腦電飯煲、微電腦洗衣機(jī)之類的那種微電腦,
    9
    發(fā)表于 2011-5-30 10:03:17 | 只看該作者
    提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
    10
     樓主| 發(fā)表于 2011-5-30 23:23:23 | 只看該作者
    whxvip 發(fā)表于 2011-5-30 10:03
    呵呵,明白了,你這些是單片機(jī)里面的一些邏輯

    可以這么說(shuō)吧

    本版積分規(guī)則

    客服投訴、違法和不良信息、未成年人保護(hù)舉報(bào)電話:0660-3277345 舉報(bào)郵箱:swsmw@qq.com

    快速回復(fù) 返回頂部 返回列表
    中文欧美日韩久久,免费婬色男女乱婬视频国产,久久香蕉国产线看观看14,麻豆AV手机在线观看 亚洲国产欧美不卡在线观看 久久99九九这里只有精品2
  • <menu id="w4oac"><noscript id="w4oac"></noscript></menu>
    <code id="w4oac"><abbr id="w4oac"></abbr></code>
    <delect id="w4oac"></delect>