20121
湖北民族学院—信息工程学院—单片机综合实验报告
51单片机课程设计
题 目 秒表程序设计 专 业 能源工程及其自动化班 级 2012能源01 学 号 1204180126 姓 名 颜 亮 指 导 教 师 苏 文 静 学 院 名 称 电气信息学院
年 6 月 8 日
湖北民族学院—信息工程学院—单片机综合实验报告
2
湖北民族学院—信息工程学院—单片机综合实验报告
一、课题任务要求 用ATC
51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。即数码显示管在原先的计数上快速加一。
二、设计思路
1、使用单片机,设计秒表,能显示分分秒秒;
2、使用三个按键停止,开始,复位,其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时; 3、使用液晶或数码管显示; 4、使用定时器中断。
三、硬件设计
3.1、单片机介绍
单片机:ATC51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
ATC51主要特性: ·与MCS-51 兼容 ·低功耗的闲置和掉电模式 ·4K字节可编程闪烁存储器
·全静态工作:0Hz-24MHz ·寿命:1000写/擦循环 ·数据保留时间:10年 ·三级程序存储器锁定 ·128×8位内部RAM
3
湖北民族学院—信息工程学院—单片机综合实验报告
·片内振荡器和时钟电路 ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 3.2管脚说明: VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为ATC51的一些特殊功能口。
4
湖北民族学院—信息工程学院—单片机综合实验报告
3.3仿真原理图
C122pX1U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617A0A1A2A3A4A5A6A7B0B1B2B3B4B5B6B7A0A1A2A3A4A5A6B0B1B2B3B4B5B612MHz19C21822pXTAL2C3910uRSTR110k293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51
四、程序清单
#include #define uchar unsigned char #define uint unsigned int sbit kai=P3^0; sbit juxu=P3^2; sbit fuwei=P3^4; uchar a,i;uchar code shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uint k) {
unsigned char i,j; for(;k>0;k--) for(i=142;i>0;i--) for(j=2;j>0;j--); }
void main() {
a= 0; i= 0;
TMOD = 0x01;
5
湖北民族学院—信息工程学院—单片机综合实验报告
TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; TR0 = 0; ET0 = 1; EA = 1;
P0 = shuzi[0]; P2 = shuzi[0];
while(1) { delay(10); if(!kai) TR0=1; delay(10); if(!juxu) TR0 = 0; delay(10); if(!fuwei) {
P0 =shuzi[0]; P2 =shuzi[0]; i= 0; a= 0; TR0=0; } } }
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++;
if(i==20) {
i=0; a++;
if(a==99) a=0;
P0=shuzi[a/10]; P2=shuzi[a%10]; } }
6
湖北民族学院—信息工程学院—单片机综合实验报告
五、程序流程图
六、软件仿真
在享受我们成果之时,不得不感慨单片机的重要性与高难度性,所以为期一周的单片机课程设计没有浪费,我们从中学到了很多知识.,也让我们对单片机有了更深一步的了解.虽然最后结果是出来了,可这与老师的精心指导是分不开的。
7
湖北民族学院—信息工程学院—单片机综合实验报告
七、设计体会
这次实训虽然其中会有些错误和失败,但总的来说是受益匪浅,在运用中发现问题,解决问题,就是最大的收获。专心做自己的事,是一种乐趣;互相交流,是大家一起进步的必要过程;上网查阅资料,是获得所需信息的有效途径。我想,这些练习和经验都将是我以后最宝贵的财富!
总之:1.虽然以前用过keil和proteus,但这次实验,更加加深了对这两个软件熟悉程度,以及调试程序的能力。万事开头难,要勇敢的迈出第一步。开始时候是有点难度,但不要为自己找借口,只有肯动手行动起来,以后的路就会慢慢地顺起来了。知识点用到才学,不用的暂时放在一边。这个世界,如果每样东西都学,自己就会太累,但这并不是说有些东西可以不学,常用软件的基本操作,例如keil,proteus,protel等;
2.刚开始学习单片机编程时,先要学会看懂别人的程序,适当修改后,实现自己需要的功能,这就是所谓“站在巨人的肩膀上”,但是程序不要光看别人的,而不自己动手写,一定要自己看了别人怎么写后自己再写一遍,最好这时什么都不要参考,凭自己的印象去写,遇到错误时再好好看下,可以收到事半功倍效果; 3.必须学会掌握调试程序(Debug)的方法,自己的程序遇到错误时一定要自己慢慢的把它调出来,这样才能真正提高分析问题,解决问题的能力。因为找到解决问题的思路比找到代码更重要,世界上的事情千变万化,就像不可能找到两片相同的叶子一样,世界上也找不到使用同一个代码的项目,所以要学会自己分析问题,找出解决问题的方案。即相同的功能,可以用不同的代码实现。
8