2017年3月7日 星期二

atmega, at328p+hm-10 ble board

閒閒沒事又設計了一款atmega328p+hm10 ble的板子 經過幾次改版,選擇用軟排線來外接燒錄 板子的正面照,右邊就是軟排線,需用usb-isp對mcu燒錄
板子背面照

usb-isp:

燒錄時要記得設定

 這個要取消,否則clock會是用mcu內部震盪

選擇這個,才會變成外部震盪


再來就是程式碼了,我直接使用arduino出的compiler工具,compiler之後直接去找hex code
然後就可以燒錄了,source code as follows


#include
/////////UART-9600/////////////
/////////NPN/////////////
/////////IR-LED-PIN2/////////////

const int ledPin1 = 2;      // the number of the LED pin(PNP-LOW-Active)
const int ledPin2 = 3;
const int ledPin3 = 4;
const int ledPin4 = 5;
const int ledPin5 = 6;
void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
  digitalWrite(ledPin3, LOW);
  digitalWrite(ledPin4, LOW);
  digitalWrite(ledPin5, LOW);
  Serial.begin(9600);//
}

void loop()
{
  char incomingByte;

  if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();
  switch (incomingByte)
  {
    case '0':
    digitalWrite(ledPin1, HIGH);
    break;  
    case '1':
    digitalWrite(ledPin1, LOW);
    break;

 
    case '2':
    digitalWrite(ledPin2, HIGH);
    break;  
    case '3':
    digitalWrite(ledPin2, LOW);
    break;
 
    case '4':
    digitalWrite(ledPin3, HIGH);
    break;
    case '5':
    digitalWrite(ledPin3, LOW);
    break;

    case '6':
    digitalWrite(ledPin4, HIGH);
    break;
    case '7':
    digitalWrite(ledPin4, LOW);
    break;

 
    default:
    break;
  }
}

}


再來~~~~~~~~~如何跟板子上的藍芽連線呢??
最簡單的方式就是用手機找個BLE的SPP工具
我是自己設計一個APP,來跟板子上的HM10做連線、控制
以下是APP操作介面

再來,廢話不多說,以下是DEMO 影片

https://www.youtube.com/watch?v=pBYEnuhDiyI&t=4s





2011年4月3日 星期日

4Bit LCD Display















//11.0592mhz//
#include "reg52.h"
#include "stdio.h"
#define c2051 1
//#define S52 2

#ifdef S52
sbit rs = P2^0; /* LCD RS 接腳控制位元定義*/
sbit en = P2^1; /* LCD EN 接腳控制位元定義*/
#define PP P0
#endif

#ifdef c2051
sbit rs = P3^4; /* C2051 LCD RS 接腳控制位元定義*/
sbit en = P3^5; /* C2051 LCD EN 接腳控制位元定義*/
#define PP P1
#endif


void delay(int d)
{
int i、j;
for(i=0; i for(j=0; j<500; j++) ;
}

void del() /* 短暫延遲*/
{
int i;
for(i=0; i<100; i++) ;
}


void en1() /* LCD 致能控制信號*/
{
en=1;del();
en=0;del();
}

void write_com(unsigned char c) /* 寫入指令暫存器*/
{
PP=c; rs=0; en1(); c<<=4; /* 左移4 位元*/
PP=c; rs=0; en1();
}

extern char putchar(unsigned char c)/* 寫入資料暫存器*/
{
PP=c; rs=1; en1(); c<<=4; /* 左移4 位元*/
PP=c; rs=1; en1();
}

void init_lcd() /* LCD 4 bit 存取介面初始化*/
{
en=0;
write_com(0x28); /* 4 bit I/O,雙列顯示*/
write_com(0x0e); /* 游標出現,不閃爍*/
write_com(0x06); /* 每次向右移,顯示幕不移動*/
write_com(0x01); /* 清除LCD 顯示幕*/
delay(100); /* 延遲一下*/
}

void main()
{
delay(25);
init_lcd();/* 初始化LCD 介面*/
while(1)
{
delay(25);
printf("test");
delay(25);
while(1);
}

}