单片机课程设计报告原理及代码
North China University of Science and TechnologyNorth China University of Science and Technology 课程设计报告课程设计报告 名:名: 学学号:号: 班班级:级: 15 15 通信通信 2 2 班班 指导教师:指导教师: 目目 录录 一、 设计题目和要求…………………………………………1 二、 设计原理与实现功能……………………………………1 三、 元器件介绍………………………………………………2 四、 电路设计…………………………………………………4 五、 软件设计…………………………………………………5 六、 设计总结……………………………………………… 24 一、设计题目和要求一、设计题目和要求 题目:题目:数字钟 要求:要求: 1.准确计时,以数字形式显示时、分、秒的时间; 2.小时的计时要求为“24 翻 1”,分和秒的计时为 60 进制。 二、设计原理与实现功能二、设计原理与实现功能 设计原理:设计原理: 本数字时钟采用 STC89C52RC 单片机芯片,晶振频率为 蜂鸣器 1602 液晶显示屏 STCSTC 89C89C 52R52R C C 按键 1 按键 2 按键 3 按键 4 11.0592MHZ,采用 C 语言编程,显示模块采用通用型 1602 液晶,发 声模块采用无源蜂鸣器。通过给时钟通电实现时钟的正常工作。 实现功能:实现功能: 本数字时钟可实现闹钟定时、显示时间功能。可利用四个按键 调节时钟。按键 1 功能为调整时钟时间,按键 2 功能为设置闹钟, 按键 3 和按键 4 分别为实现调试中“+”、“-”的功能。当时钟时 间到达定时时间,蜂鸣器响起( 20s 后停止),实现闹钟功能。且具 有整点报时的功能。 ~ 1 ~ 三、元器件介绍三、元器件介绍 STC89C52 是一种低功耗、高性能 CMOS8 位微控制器。 STC89C52 单片机简介 STC89C52 是一种低功耗、高性能CMOS8 位微控制器,具有8K 在 系统可编程 Flash 存储器。在单芯片上,拥有灵巧的 8 位 CPU 和在 系统可编程 Flash,使得 STC89C52 为众多嵌入式控制应用系统提供 高灵活、超有效的解决方案。 具有以下标准功能:8k 字节 Flash,512 字节 RAM,32 位 I/O 口 线,看门狗定时器,内置4KBEEPROM,MAX810 复位电路,三个16 位 定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口。 另外 STC89X52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择 节电模式。 空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、 中断继续工作。 掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切 工作停止,直到下一个中断或硬件复位为止。 最高运作频率 35Mhz,6T/12T 可选。 和 atmel 的对比STC89C52RC 单片机:8K 字节程序存储空间; 512 字节数据存储空间;内带 4K 字节 EEPROM 存储空间;可直接 使用串口下载;at89s52 单片机:8K 字节程序存储空间;256 字节数据存储空间;没有内带 EEPROM 存储空间 ~ 2 ~ 四、电路设计四、电路设计 四个按键分别接单片机 P1.0 P1.1 P1.2 P1.3 四个 IO 口,用于 控制时钟。 蜂鸣器接单片机P2.3引脚, 1602八个显示段接P0.0-P0.7 引脚。1602 第一个管脚接地,第二个管脚接 5V 电源,第三个管脚接 10K 的滑动变阻器。1602 的第 15、16 个管脚分别接+5V 电源和地。 ~ 3 ~ 五、软件设计五、软件设计 #include #define uchar unsigned char #define uint unsigned int uchar code table[]=“2010/01/01 Sun“; uchar code table1[]=“00:00:00“; sbit lcden=P3^4;//使能控制 sbit rs=P3^5;//数据/指令选择端 sbit rw=P3^6;//读写选择端 sbit set=P1^4;//时间设置按键 sbit set1=P1^5;//闹钟设置按键 sbit k1=P3^2; //递增按键 sbit k2=P3^3; //递减按键 sbit reset=P3^7;//从设置中跳出来 sbit buzz=P2^3; //蜂鸣器控制端 uchar code week0[]=“Sun“; uchar code week1[]=“Mon“; uchar code week2[]=“Tue“; uchar code week3[]=“Wed“; uchar code week4[]=“Thu“; uchar code week5[]=“Fri“; uchar code week6[]=“Sat“; uchar num,num1,aa,bb1,bb2,cc,year,months,day,week,shi,fen,miao,knum; uchar year1,months1,day1,week_1,shi1,fen1,miao1;//闹钟变量定义 void keyscan(); //按键程序 void time_keyscan(); void keyscan_1(); //按键程序 void time_keyscan_1(); void delay(uint z) { uchar x,y; for(x=z;x0;x--) for(y=110;y0;y--); } void delay1(void) { ;;} void buzz_pro(uchar be)//蜂鸣器发声函数 { switch(be) {//uint i; /*用于整点响铃*/case 0:{ buzz=~buzz; ~ 4 ~ //delay1(); }break; /*用于闹铃报时*/case 1:{ buzz=~buzz; //delay(10); }break; } } void write_com(uchar com)//命令写入函数 { rs=0; delay(3); P0=com; delay(3); lcden=1; delay(3); lcden=0; } void write_date(uchar date)//数据写入函数 { rs=1; delay(3); P0=date; delay(3); lcden=1; delay(3);//这里至少为 3 lcden=0; } void init()//初始化时钟函数 { rw=0; write_com(0 x38);//设置显示模式 write_com(0 x0c);//设置显示开关及光标 write_com(0 x06);// write_com(0 x01);//清屏 write_com(0 x80+1);// 设置数据起始地址 for(num=0;num0;i--) { buzz_pro(1);//蜂鸣器声音方式控制