信息电气工程学院
单片机应系统(三级项目)
设计说明书
(20142015学年第二学期)
题 目 : 开机次数记忆器设计实现
专业班级 : 电子信息工程班
学生学号 :
学生姓名 :
指导教师 :
设计周数 : 2周
设计成绩 :
2015年X月X日
1 项目设计
11 设计求
(1)单片机AT89C52核心24C02串行EEPROM进行存储开机次数
(2)LCD1602显示存储开机次数
(3)单片机复位次24C02中读取数然加1
(4)基础拓展组密码数存储进入正常界面
12 设计目
(1)培养学生正确设计思想理联系实际工作作风严肃认真实事求科学态度勇探索创新精神
(2)锻炼学生学软件力分析问题解决问题力
(3)通课程设计学生理计算结构设计工程绘图查阅设计资料标准规范运计算机应方面力训练提高
(4)巩固深化扩展学生单片机理知识
(5)培养学生团队合作力
2项目设计正文
21方案设计
211设计思路
次项目设计目实现单片机开机次数记忆显示功复位断电关机准确开机次数显示LCD1602显示屏根项目设计求实际应分析选单片机AT89C52核心24C02串行EEPROM进行存储开机次数方法C52单片机P20口P21口分控制24C02数线SDA时钟信号线SCK完成数读写功然LCD1602显示屏24C02中存储数显示出
具体设计实现逻辑流程图图1示:
图1 逻辑实现流程图
212元器件
(1) 处理器AT89C52引脚图图2示:
图2 AT89C52单片机引脚图
AT89C52低电压高性CMOS 8位单片机片含8k bytes反复擦写Flash读程序存储器256 bytes机存取数存储器(RAM)器件采ATMEL公司高密度非易失性存储技术生产兼容标准MCS51指令系统片置通8位中央处理器Flash存储单元AT89C52单片机电子行业中着广泛应
AT89C5240引脚32外部双输入输出(IO)端口时含2外中断口316位编程定时计数器2全双工串行通信口2 读写口线AT89C52常规方法进行编程线编程通微处理器Flash存储器结合起特反复擦写 Flash存储器效降低开发成
(2) 外部存储器24C02
串行E2PROM基I2CBUS 存储器件遵循二线制协议具接口方便体积数掉电丢失等特点仪器仪表工业动化控制中量应具特点:
1宽范围工作电压18v~55v
2低电压技术:
1mA典型工作电流
1uA典型机电流
3储存器组织结构
42线串行接口完全兼容I2C总线
5施密特触发输入噪声抑制
6硬件数写保护
7部周期(5ms)
8动递增址
9字节写
10esd保护25kV
11高性:擦写寿命:100万次 数保持时间:100年
12铅工艺符合RoHS标准
22单元电路设计
221处理器AT89C52引脚选择
次项目设计选择引脚分P0口P2口RES端口
P0 口组8 位漏极开路型双IO 口 址数总线复口作输出口时位吸收电流方式驱动8 TTL逻辑门电路端口P0 写1时作高阻抗输入端访问外部数存储器程序存储器时组口线分时转换址(低8 位)数总线复访问期间激活部拉电阻Flash编程时P0 口接收指令字节程序校验时输出指令字节校验时求外接拉电阻
P2口 带部拉电阻8 位双IO 口P2 输出缓级驱动(吸收输出电流)4 TTL 逻辑门电路端口P2 写1通部拉电阻端口拉高电时作输入口作输入口时部存拉电阻某引脚外部信号拉低时会输出电流(IIL)访问外部程序存储器16 位数存储器(例执行MOVX @DPTR 指令)时P2 口送出高8 位址数访问8 位址外部数存储器(执行MOVX@RI 指令)时P2 口输出P2锁存器容Flash编程校验时P2接收高位址控制信号P20口P21口分控制24C02数线SDA时钟信号线SCK完成数读写功
RST复位输入振荡器工作时RST引脚出现两机器周期高电单片机复位
单片机引脚图连接选择图3示:
图3 单片机引脚连接图
222 RC复位电路
复位电路图图4示:
图4 复位电路图
系统复位工作程加电时复位电路通电容加RST端短暂高电信号高电信号着VCC电容充电程逐渐回落RST端高电持续时间取决电容充电时间保证系统够复位RST端高电信号必须维持足够长时间图4复位电路中VCC掉电时必然会RST端电压迅速降0V部电路限制作负电压会器件产生损害外复位期间端口引脚处机状态复位系统端口置全1态果系统电时效复位程序计数器PC合适初值CPU会未定义位置开始执行程序
223 LCD1602显示屏连接
LCD1602引脚功:
第1脚:VSS电源
第2脚:VDD接5V电源正极
第4脚:RS寄存器选择高电1时选择数寄存器低电0时选择指令寄存器
第5脚:RW读写信号线高电(1)时进行读操作低电(0)时进行写操作
第6脚:E(EN)端(enable)端
第7~14脚:D0~D78位双数端
单片机P25P26P27分接LCD1602RSRWE端口图5示:
图5 LCD1602显示屏连接
224 24C02连接
C52单片机P20口P21口分控制24C02数线SDA时钟信号线SCK完成数读写功具体电路图图6示:
图6 24C02 连接
225 整体电路
系统整体仿真电路实物操作电路图7图8示:
图7 整体仿真电路图
图8 仿真实物图
23系统实现程序
#include
#include
sbit SDA P2^0 AT24C01串行数 5脚
sbit SCL P2^1 AT24C01串行时钟 6脚
int time0
int time20
typedef unsigned char uint8 * defined for unsigned 8bits integer variable 符号8位整型变量 *
typedef signed char int8 * defined for signed 8bits integer variable 符号8位整型变量 *
typedef unsigned char BYTE
typedef unsigned int WORD
typedef bit BOOL
sbit rs P2^6
sbit rw P2^5
sbit ep P2^7
BYTE code dis1[] {TIME}
BYTE dis2[10]{0123456789}
BYTE dis3[10]{0123456789}
delay(BYTE ms)
{ 延时子程序
BYTE i
while(ms)
{
for(i 0 i< 250 i++)
{
_nop_()
_nop_()
_nop_()
_nop_()
}
}
}
BOOL lcd_bz()
{ 测试LCD忙碌状态
BOOL result
rs 0
rw 1
ep 1
_nop_()
_nop_()
_nop_()
_nop_()
result (BOOL)(P0 & 0x80)
ep 0
return result
}
lcd_wcmd(BYTE cmd)
{ 写入指令数LCD
while(lcd_bz())
rs 0
rw 0
ep 0
_nop_()
_nop_()
P0 cmd
_nop_()
_nop_()
_nop_()
_nop_()
ep 1
_nop_()
_nop_()
_nop_()
_nop_()
ep 0
}
lcd_pos(BYTE pos)
{ 设定显示位置
lcd_wcmd(pos | 0x80)
}
lcd_wdat(BYTE dat)
{ 写入字符显示数LCD
while(lcd_bz())
rs 1
rw 0
ep 0
P0 dat
_nop_()
_nop_()
_nop_()
_nop_()
ep 1
_nop_()
_nop_()
_nop_()
_nop_()
ep 0
}
lcd_init()
{ LCD初始化设定
lcd_wcmd(0x38)
delay(1)
lcd_wcmd(0x0c)
delay(1)
lcd_wcmd(0x06)
delay(1)
lcd_wcmd(0x01) 清LCD显示容
delay(1)
}
2402程序2
void AT2401_Delay()
{}
void busy()
{
BYTE temp
temp0x00
rs0
rw1
ep1
while((temp&0x80)0x80)
{
ep0
_nop_()
ep1
_nop_()
}
}
void AT2401_Start()启动信号
{
SDA1
AT2401_Delay()
SCL1
AT2401_Delay()
SDA0
AT2401_Delay()
}
void AT2401_Stop()停止信号
{
SDA0
AT2401_Delay()
SCL1
AT2401_Delay()
SDA1
AT2401_Delay()
}
void AT2401_Respons()响应
{
uint8 i
SCL1
AT2401_Delay()
while((SDA1)&&(i<250))
i++
SCL0
AT2401_Delay()
}
void AT2401_Init()初始化函数
{
SDA1
AT2401_Delay()
SCL1
AT2401_Delay()
}
void AT2401_WByte(uint8 date)写字节
{
uint8 itemp
tempdate
for(i0i<8i++)
{
temptemp<<1
SCL0
AT2401_Delay()
SDACY
AT2401_Delay()
SCL1
AT2401_Delay()
}
SCL0
AT2401_Delay()
SDA1
AT2401_Delay()
}
uint8 AT2401_RByte()读字节
{
uint8 ik
SCL0
AT2401_Delay()
SDA1
AT2401_Delay()
for(i0i<8i++)
{
SCL1
AT2401_Delay()
k(k<<1)|SDA
SCL0
AT2401_Delay()
}
return k
}
void AT2401_WAddr(uint8 addressuint8 date)指定址写数
{
AT2401_Start()
AT2401_WByte(0xa0)
AT2401_Respons()
AT2401_WByte(address)
AT2401_Respons()
AT2401_WByte(date)
AT2401_Respons()
AT2401_Stop()
}
uint8 AT2401_RAddr(uint8 address)指定址读取字节
{
uint8 date
AT2401_Start()
AT2401_WByte(0xa0)
AT2401_Respons()
AT2401_WByte(address)
AT2401_Respons()
AT2401_Start()
AT2401_WByte(0xa1)
AT2401_Respons()
dateAT2401_RByte()
AT2401_Stop()
return date
}
void wr_com(BYTE com)
{
ep0
rs0
rw0
P0com
_nop_()
ep1
_nop_()
ep0
}
void wr_data(BYTE date)
{
busy()
ep0
rs1
rw0
P0date
_nop_()
ep1
_nop_()
ep0
}
main()
{
BYTE i
lcd_init() 初始化LCD
AT2401_Init()
time AT2401_RAddr(0x01)
time2 AT2401_RAddr(0x02)
if(time>9)
{
AT2401_WAddr(0x010)
time2+1
}
time+1
if(time2>9&&time>9)
{
time0
time20
}
AT2401_WAddr(0x01 time)
AT2401_WAddr(0x02 time2)
lcd_pos(4) 设置显示位置第行第5字符
i 0
while(dis1[i] '\0')
{ 显示字符TIME
lcd_wdat(dis1[i])
i++
}
lcd_pos(0x49) 设置显示位置第二行第位字符
dis2[time]
lcd_wdat(dis2[time]) 显示字符
delay(1)
lcd_pos(0x48) 设置显示位置第二行第二位字符
dis2[time2]
lcd_wdat(dis3[time2]) 显示字符
while(1)
}
3 项目设计总结
通次课程设计更加扎实掌握关单片机应系统设计方面知识设计程中然遇问题次次思考遍遍检查终找出原暴露出前期方面知识欠缺验足实践出真知通亲动手制作掌握知识纸谈兵
课程设计诚然门专业课专业知识专业技提升时门讲道课门辩思课许道思莫空间时设计感触深抽象理具体认识通次课程设计掌握AT89C5224C02LCD1602基知识连接测试通查资料熟悉外部存储24C02工作原理解C语言程序单片机系统设计中应掌握系统电路调试方法
次课程设计程中团队精神进行考察组三分工合作查资料电路设计程序设计硬件实物仿真做条紊配合越越默契问题起解决成功起体会喜悦果然团结力量互相间默契融洽配合换终完美结果认次课设仅培养独立思考团队协作动手操作力种力提高更重学会学方法日实真受益匪浅面社会挑战断学实践学实践帮助
4参考文献
[1] 张毅刚彭喜元董继成单片机原理应北京:高等教育出版社2003
[2] 史良LCD12864显示模块微处理器接口设计 [J] 矿业安全环保 1999
项目设计
评 语
项目设计
成 绩
指导教师
(签字)
年 月 日
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档