电子时钟的设计1一、设计目的23电子系统CAD课程设计是电子信息工程专业的一个重要实践教学环节。
在课程设计过程中,学生通过一个较4完整的系统设计过程,可以加深对本门课程所学理论知识的理解与应用,提高学生对所学理论知识的综合运用能力,5使学生对Protel电子线路设计、Protues、Keil C等电子设计软件有较深的掌握。
通过课程设计,还可以培养学生独立6工作能力,为将来毕业设计打好基础。
二、设计要求781. 用AT89C51/AT89C52单片机及接口电路设计一个电子时钟。
9①系统硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,组成功能完整的系统,画出Protel 99SE的电路10图和PCB图形。
11②系统软件设计:根据数字电子时钟功能,完成控制软件的编写与调试,并对数码显示进行控制。
122.实现的基本功能:①开机时,电子钟从00:00:00开始自动计时,并在8段LED数码管上显示时间。
13②设置按键,能对时、分、秒进行调整。
三、设备及工作环境14151. 硬件:计算机一台162. 软件:Windows操作系统、protel 99SE软件、Protues仿真软件、KeilC编译软件四、电子钟硬件设计17AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。
A T89C2051是一种1819带2K字节闪存可编程可擦除只读存储器的单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标20准的MCS-51指令集和输出管脚相兼容。
2122MAX7219 MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数2324字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码25器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器26用来设置各个LED的段电流。
MAX7221与SPI™、QSPI™以及MICROWIR E™相兼容,同时它有限制回转27电流的段驱动来减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。
每个数据28可以寻址在更新时不需要改写所有的显示。
MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编29码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示301-8位数据,还有一个让所有LED发光的检测模式。
在应用时要求3V的操作电压或segment blinking,可以查31阅MAX6951数据资料32PROTEL 是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,具有很强的数3334据交换能力和开放性及3D模拟功能,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作。
系统模块核心电路AT89C51,电源电路,按键输入,max7219。
3536核心电路整个设计核心部分,显示运行控制的处理都在这里处理3738键盘输入39由于多功能数字温度计具备时钟的功能,因此需要具有设置时钟的按键输入设备40电源电路41MC7805能够将7~30V的输入电压稳压至5V输出,但是由于MC7805不是开关电源,而是线性稳压电源,采用MC7805 42作为电源的电路,其中BAT是电池电源输入端,一般为9V。
43Max721944MAX7219是Maxim公司生产的一款高性能8位共阴极数码管驱动芯片,通过MAX7219可以使用单片机极少的引脚实现多45个数码管的显示驱动PCB设计步骤46471.新建PCB文件:选取File/New...打开New Document对话框,选取 PCB Document建立一个新的 PCB 文档48双击新建的 PCB 文件图标,即可进入 PCB 印制电路板编辑器492.规划电路板:设置版层503.设置PCB电路参数514.装入元件库:执行菜单命令Design/Add/Remove Library ,执行该命令后,系统会弹出“添加删除元件库”对话52框,在该对话框中找出原理图中的所有元件所对应的元件封装库。
选中这些库用鼠标单击按钮Add即可添加这些元53件库545.网络表与元件的装入:首先执行菜单命令Design/Load Nets。
执行完该命令后,系统会弹出如图1-68所示的“装55入网络表与元件”对话框。
Netlist File 输入选项框中输入文件名,如果不知道网络表所在位置,可以单击对话框56中的 Browse 按钮576.再次装入网络表587.元件布局598.自动布线609.手工调整布线6110.覆铜626364656667五、电子钟软件设计68Keil C516970是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、71可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功72能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil 73软件需要WIN98、NT、WIN2000、WINXP等操作系统。
Proteus软件7475是英国Labcenter electronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单76片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
77电子钟的总体设计思路,电子钟各模块:主程序流程图,时钟更新程序流程图,显示程序流程图,按键程序流程图78时钟更新79void Timer() interrupt 1 //定时器定时50ms80{81TF0=0;82TH0 = 0x3c;83TL0 = 0xb0;84n++;85if(n>20)86{87n = 0;88second++;89}90if(second==60 )91{92second = 0;93minute++;94}95if(minute==60)96{97minute = 0;98hour++;99}100if(hour==24)101{102hour = 0;103}104}主程序main()105{106unsigned int s1,s2,m1,m2,h1,h2;107TMOD = 0x01; //定时器1 定时方式2108TH0 = 0x3c; //11.0592MHz 1200 波特率109TL0 = 0xb0;110111EA = 1;112ET0 = 1;113TR0 = 1; //启动定时器114115init_max7219(); //MAX7219初始化函数116117while(1)118{119get_key();120121s1 = second/10;//秒的十位数122s2 = second%10;//秒的个位数123m1 = minute/10;124m2 = minute%10;125h1 = hour/10;126h2 = hour%10;127w_max7219(0x01,disp_table[h1]); //向MAX7219第一位寄存器写显示数据1(小时十位数) 128w_max7219(0x02,disp_table[h2]); //向MAX7219第二位寄存器写显示数据2(小时个位数) 129w_max7219(0x03,disp_table[14]); //向MAX7219第三位寄存器写显示数据3('-')130w_max7219(0x04,disp_table[m1]); //向MAX7219第四位寄存器写显示数据4131w_max7219(0x05,disp_table[m2]); //向MAX7219第五位寄存器写显示数据5132w_max7219(0x06,disp_table[14]); //向MAX7219第六位寄存器写显示数据6133w_max7219(0x07,disp_table[s1]); //向MAX7219第七位寄存器写显示数据7134w_max7219(0x08,disp_table[s2]); //向MAX7219第八位寄存器写显示数据8135}136137}138按键程序139140141if(Menu == 0)//开启调时,并调时移位142{143TR0 = 0;144menu1 = 1;145Flag ++;146}147if(Add == 0 && menu1 == 1)//调时减148{149if(Flag == 1)150{151if(hour == 23) hour = 0; 152else hour++;153}154if(Flag == 2)155{156if(minute == 59) minute = 0; 157else minute++;158}159if(Flag == 3)160{161if(second == 59) second = 0; 162else second++;163}164}165if(Cut == 0 && menu1 == 1)//调时减166{167if(Flag == 1)168{169if(hour == 0) hour = 23;170else hour--;171}172if(Flag == 2)173{174if(minute == 0) minute = 59; 175else minute--;176}177if(Flag == 3)178{179if(second == 0) second = 59; 180else second--;181}182}183显示程序184185void init_max7219()186{187w_max7219(0x0a,0x07);188w_max7219(0x0b,0x07);189w_max7219(0x09,0x00);190w_max7219(0x0c,0x01);191w_max7219(0x0f,0x00);192timer_ms(2);193}194void w_max7219(unsigned char addr,unsigned char wdata)195{196unsigned char temp,i=1,j,k;197LD=0;198while(i<16)199{200if(i<8) temp=addr;201else temp=wdata;202for(j=0;j<8;j++)203{204CLK=0;205if((temp&0x80)==0x80) DIN=1;206else DIN=0;207for(k=5;k>0;k--);208CLK=1;209for(k=5;k>0;k--);210temp<<=1;211}212i+=8;213}214LD=1;215}216217218219220221六、总结和收获222223完成了为时两个礼拜的电子时钟课程设计,过程曲折可谓一语难尽。