24C02-多花样流水灯演示程序(24C02 - multipattern water lamp demo program)
24C02-多花样流水灯演示程序(24C02 - multipattern water lamp
demo program)
24C02- multi pattern water lamp demonstration program (C51 ASM) 2007-03-02
15:16/*******************************************************************/
/ * ME300B microcontroller development system demo - multi flow pattern lamp
LED / * * /
/ * will demonstrate the data is written first in 24C02 chip, then the data read out one by one to send the P0 port LED display.
Author: gguoqing time: 2006/06/20
[Copyright] * Copyright (C) www.willar.com All Rights Reserved Wei nanoelectronic.
/ * [declare] this program is only used for learning and reference, please indicate the author and copyright information reference!
/*******************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define OP_WRITE 0xa0 / / device address and write operation
#define OP_READ / / 0xa1 device address and read operations
Uchar code display[72]={
0xFE, 0xFD, 0xFB, 0xF7,0xEF, 0xDF, 0xBF, 0x7F,
0xBF, 0xDF, 0xEF, 0xF7,0xFB, 0xFD, 0xFE, 0xFF,
0xFE, 0xFC, 0xF8,0xF0,0xE0,0xC0,0x80,0x00,
0x80,0xC0,0xE0,0xF0,0xF8,0xFC, 0xFE, 0xFF,
0xFC, 0xF9,0xF3,0xE7,0xCF, 0x9F, 0x3F,
0x9F, 0xCF, 0xE7,0xF3,0xF9,0xFC, 0xFF,
0xE7,0xDB, 0xBD, 0x7E, 0xBD, 0xDB, 0xE7,0xFF,
0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
0xAA, 0x55,0x18,0xFF, 0xF0,0x0F,
0x00,0xFF, 0x00,0xFF};
Sbit SDA = P3^4;
Sbit SCL = P3^3;
Void, start ();
Void, stop ();
Uchar, Shin ();
Bit shout (uchar write_data);
Void write_byte (uchar, addr, uchar, write_data);
Void fill_byte (uchar, fill_size, uchar, fill_data);
Void delayms (uint MS);
Uchar, read_current ();
Uchar read_random (uchar random_addr);
#define (); {_nop_ (); _nop_ (); _nop_ (); _nop_ ();} delayNOP;
/**********************************************************/
Main (void)
{
Uchar i;
SDA = 1;
SCL = 1;
Fill_byte (72,0xff); / / the first 72 bytes filled 0xff
For (I = 0; I < 72; / / i++) write code to the AT24C02 display
{
Write_byte (I, display[i]);
}
For (I =0; I <72; / / i++) from AT24C02 from the data to the P0 display
{
P0 = read_random (I);
Delayms (350);
}
}
/**********************************************************/
Void, start ()
/ / start bit
{
SDA = 1;
SCL = 1;
DelayNOP ();
SDA = 0;
DelayNOP ();
SCL = 0;
}
/**********************************************************
/
Void, stop ()
/ / stop
{
SDA = 0;
DelayNOP ();
scl = 1;
delaynop ();
sda = 1;
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * /
uchar shin ()
/ / 从at24c02移出数据到mcu
{
uchar i, read _ data;
for (i = 0; i < 8; i + +)
{
scl = 1;
read _ data < < = 1;
read _ data | = sda.
scl = 0;
}
return (read _ data);
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * /
bit word (uchar write _ data)
/ / 从mcu移出数据到at24c02
{
uchar i;
_ bit ack bit.
for (i = 0; i < 8; i + +) / / 循环移入8个位
{
sda = (bit) (write _ data & 0x80);
_ nop _ ();
scl = 1;
delaynop ();
scl = 0;
write _ data < < = 1;
}
sda = 1; / / 读取应答
delaynop ();
scl = 1;
delaynop ();
_ ack bit = sda.
scl = 0;
_ return ack bit; / / 返回at24c02应答位
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * /
void write _ byte (uchar addr, uchar write _ data)
/ / 在指定地址addr处写入数据write _ data
{
start ();
shout (op _ write).
shout (addr).
shout (write _ data);
stop ().
delayms (10); / / 写入周期
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
void fill _ byte (uchar fill _ size, uchar fill _ data)
/ / 填充数据fill _ data到eeprom内fill _ size字节
{
uchar i;
for (i = 0; i < fill _ size; i + +)
{
write _ byte (i, fill _ data);
}
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
uchar read _ current ()
/ / 在当前地址读取
{
uchar read _ data;
start ();
shout (op _ read).
read _ data = shin ();
stop ().
return read _ data;
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * /
uchar read _ random (uchar random _ addr)
/ / 在指定地址读取
{
start ();
shout (op _ write).
shout (random _ addr);
return (read _ current ());
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
void delayms (uint ms)
/ / 延时子程序
{
uchar k;
while (ms)
{
for (k = 0; k < 120; k + +);
}
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
sda bit p3.4; 定义24c02数据线
scl bit p3.3; 定义24c02时钟线
-----------------------------------------------------;
org 0000h
ajmp main
org 0030h
-----------------------------------------------------;
main:
mov sp, # 60h
mov p0, # 0ffh
acall write _ data
m _ loop.
acall read _ data
jmp m _ loop
;
NOP
NOP
NOP
Setb SCL; 启动一个时钟周期, 读总线
NOP
NOP
NOP
NOP
Mov C, SDA; 将sda状态读入c
结果移入a RLC.
Setb SDA; 释放sda数据线
Djnz R7, R _ byte; 判断8位数据是否接收完全?
Ret
----------------------------------------------------;
向iic总线发送一个字节数据;
; 入口参数: - - - 待发送数据存放在a中
----------------------------------------------------;
Sendbyte:
Mov R7, # 08
S _ byte:
The RLC
Mov SDA, C
Setb SCL
NOP
NOP
NOP
NOP
The CLR SCL
Djnz R7, s _ byte; 8位发送完毕?
Ret
-----------------------------------------------------;
等待应答信号;
等待从机返回一个响应信号;
-----------------------------------------------------;
Waitack:
The CLR SCL
Setb SDA; 释放sda信号线
NOP
NOP
Setb SCL
NOP
NOP
NOP
Mov C, SDA
JC waitack; sda为低电平, 返回了响应信号
The CLR SDA
The CLR SCL
Ret
----------------------------------------------------;
启动信号子程序;
----------------------------------------------------;
Start:
Setb SDA
Setb SCL
NOP
The CLR SDA
NOP
NOP
NOP
NOP
The CLR SCL
Ret
----------------------------------------------------;
停止信号子程序;
----------------------------------------------------;
Stop:
The CLR SDA
NOP
Setb SCL
NOP
NOP
NOP
NOP
Setb SDA
NOP
NOP
The CLR SCL
The CLR SDA
Ret
----------------------------------------------------;
延时5ms子程序;
; 输入参数: R4 - R4 * 5ms
输出参数: 无;
; 影响资源: R4, R5, r6等
----------------------------------------------------;
Delay _ 5ms.
Mov R6, # 10
Of _ LP:
Mov R5, # 250
Djnz R5, $
Djnz R6, _ LP
Djnz R4, delay _ 5ms
Ret
----------------------------------------------------;
Tab:
DB 0feh, 0fdh, 0fbh, 0f7h, 0efh, 0dfh, 0bfh, 07fh
DB 0bfh, 0dfh, 0efh, 0f7h, 0fbh, 0fdh, 0feh, 0ffh
DB 0feh, 0fch, 0f8h, 0f0h, 0e0h, 0c0h, 080h, 000h
DB 080h, 0c0h, 0e0h, 0f0h, 0f8h, 0fch, 0feh, 0ffh
DB 0fch, 0f9h, 0f3h, 0e7h, 0cfh, 09fh, 03fh
DB 09fh, 0cfh, 0e7h, 0f3h, 0f9h, 0fch, 0ffh
DB 0e7h, 0dbh, 0bdh, 07eh, 0bdh, 0dbh, 0e7h, 0ffh
DB 0e7h, 0c3h, 081h, 000h, 081h, 0c3h,
0e7h,0ffh
DB 0aah,055h,018h,0ffh,0f0h,00fh
DB 000h,0ffh,000h,0ffh
;-----------------------------------------------------
结束
本文档为【24C02-多花样流水灯演示程序(24C02 - multipattern water lamp demo program)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。