?? bc7281.txt
字號:
#include <util/delay.h>
#include <avr/io.h>
//*** 函數定義 ***
void write728x(unsigned char, unsigned char); // 寫入到BC728x
void send_byte(unsigned char); // 發送一個字節
void delay_1us(void); // 延時1us
void delay_us(unsigned int); // us級延時
void delay_1ms(void); // 延時1ms
void delay_ms(unsigned int); // ms級延時
//*** 變量及I/O口定義 ***
// #define CLK (PORTB&0x20) // clk 連接于 PB.5
// #define DAT_OUT (PORTB&0x80)
// #define DAT_IN (PINB&0x80) // dat 連接于 PB.7
// #define KEY (PINB&0x08) // key 連接于 PB.3
void port_init(void)
{
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
void main(void)
{
DDRB=0x01; // 設置I/O口B.5為輸出
PORTB=0x00;
delay_us(100); // 等待 BC728x 完成復位
write728x(0x12,0x84); // 初始化BC728x為164模式,KMS=1
while (1)
{
write728x(0x15,0); // 第一排LED全滅
write728x(0x15,0x15); // 第二排LED全亮
write728x(0x15,0x32);
write728x(0x15,0x91);
delay_ms(300);
}
}
// ***********************************************************
// * 寫入BC728X, 第一個參數為目標寄存器地址, 第二個參數為要寫入的數據 *
// ***********************************************************
void write728x(unsigned char reg_add, unsigned char write_data)
{
send_byte(reg_add); // 發送寄存器地址
send_byte(write_data); // 發送數據字節
}
// ***********************************************************
// * 向 BC728X 發送一個字節 *
// ***********************************************************
void send_byte(unsigned char send_byte)
{
unsigned char bit_counter;
PORTB&=~(1<<PB0); // 產生一 clk 脈沖
// delay_1us();
PORTB|=(1<<PB0);
// delay_1us();
while (PINB&(1<<PB2)); // 等待 BC728X 輸出 dat 低電平響應
delay_us(3);
PORTB&=~(1<<PB0); // 再次輸出一 clk 脈沖
//delay_1us();
PORTB|=(1<<PB0);
//delay_1us();
while (!(PINB&(1<<PB2))); // 等待 BC728X 進入接收狀態
delay_us(2);
for (bit_counter=0;bit_counter<8;bit_counter++)
{ // 發送 8 個比特
if ((send_byte&0x80)==0)
{
DDRB=0x05;
// 設置I/O口B.7和B.5為輸出,其余為輸入
PORTB&=~(1<<PB2);
// 如果待發bit為0, 置 dat 為 0
delay_1us();
}
else
{
PORTB|=(1<<PB2); // 反之置為 1
}
delay_1us();
send_byte=send_byte*2; // send_byte 左移一位
delay_us(1);
PORTB&=~(1<<PB0); // 輸出一 clk 脈沖
// delay_1us();
PORTB|=(1<<PB0);
delay_us(3); // 短暫延時
}
DDRB=0x01;
delay_us(5); // 恢復I/O口B.7為輸入
}
void delay_1us(void)
{
asm("nop");
}
void delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(4*143-2);i++);
}
void delay_ms(unsigned int n)
{
unsigned int i=0;
for(i=0;i<n;i++)
delay_1ms();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -