单片机课程设计报告原理及代码
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[]“000000“; sbit lcdenP34;//使能控制 sbit rsP35;//数据/指令选择端 sbit rwP36;//读写选择端 sbit setP14;//时间设置按键 sbit set1P15;//闹钟设置按键 sbit k1P32; //递增按键 sbit k2P33; //递减按键 sbit resetP37;//从设置中跳出来 sbit buzzP23; //蜂鸣器控制端 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 delayuint z { uchar x,y; forxz;x0;x-- fory110;y0;y--; } void delay1void { ;;} void buzz_prouchar be//蜂鸣器发声函数 { switchbe {//uint i; /*用于整点响铃*/case 0{ buzzbuzz; 4 //delay1; }break; /*用于闹铃报时*/case 1{ buzzbuzz; //delay10; }break; } } void write_comuchar com//命令写入函数 { rs0; delay3; P0com; delay3; lcden1; delay3; lcden0; } void write_dateuchar date//数据写入函数 { rs1; delay3; P0date; delay3; lcden1; delay3;//这里至少为 3 lcden0; } void init//初始化时钟函数 { rw0; write_com0 x38;//设置显示模式 write_com0 x0c;//设置显示开关及光标 write_com0 x06;// write_com0 x01;//清屏 write_com0 x801;// 设置数据起始地址 fornum0;num0;i-- { buzz_pro1;//蜂鸣器声音方式控制