利用单片机,设计一个自动打铃器,熟悉定时、中断方法,并通过电路仿真。
以学校白天上课、下课及午休时间为依据,设计51单片机为核心的自动打铃器。假定学校作息时间如下所示: 第1节课 8:00——8:45 第2节课 8:55——9:40 第3节课 10:10——10:55 第4节课 11:05——11:50 第5节课 14:00——14:4 第6节课 14:55——15:40 第7节课 16:10——16:55 第8节课 17:05——17:50 根据此作息时间表,每到上课或下课时控制电铃接通,接通1分钟后电铃断开。结合万年历,可自动排除节假日和星期六星期日打铃操作,亦可手工按键设置打铃时间,修正节假日作息时间。
实现功能:自动控制电铃器需要大致分为显示、按键、时钟、控制四个部分。通过内部中断驱使电铃打铃。本实验设置了四个按键,调整时钟的时间时,当时钟时间和设置的时间相同时,打铃器响,led灯亮。打铃时长60S。
在keil里的工程里加入.c文件(shi9.c) 点击source group…>add files to group “sources group” …
写好.c文件代码后,开始编译,运行。 注意:在编译运行后要后要确认是否生成了hex文件,若没有需要设置如下
点击target…>options for targets…>outout…>下方选项Creat HEX file 这样就能保证生成HEX文件,然后在proteous中能导入单片机仿真。
proteous建立工程的步骤可以参考网上,这里就不多介绍了*
图中的器件可以点击框上方的“p”,然后搜索相应需要的器件。
具体的电路图如图(注意数码管的接线) 将之前keil中编译运行好的hex文件导入单片机。以8点钟为例,此时灯亮且会有蜂鸣声,如图: 解释:图中中间两个按键分别控制加减,第一个按键控制时或是分。 双击单片机AT89C51,可以选择hex文件 c源程序代码 #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit p1=P2^6; sbit p2=P2^5; sbit p3=P2^4; sbit p4=P2^3; sbit dp=P0^7; sbit fmq=P3^4; int a,b,c,d; int shi=0,fen=0,miao=0; int moshi=0;kaishi=0;tiaozheng=0;count1=0;count2=0;count3=0;ss=0;naozhong=0; uchar code LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void Delay(uint i) {... } void xianshi() {... } void shuju1() { ... } void tiaozhengmoshi() { ... } void key() { ... } void shuju() { a=shi/10;b=shi%10;c=fen/10;d=fen%10; } void dingshi() { ...} void main(void) {TMOD =0x01; TH0=0x0D8; TL0=0X0F0; EA=1; ET0=1; TR0=1; while(1) {key(); shuju(); xianshi(); dingshi(); } } void time0(void)interrupt 1 { ... }如此便完成了利用c51单片机编写和proteous仿真的全部过程。具体keil工程文件建立和proteous器件选择的操作参考网上教程。
本次完成了C51单片机c语言程序编写,练习在keil中的工程文件的建立,通过将c可执行文件导入单片机,实现程序电路的仿真。MDK开发环境下,也实现了STM32简单程序的编译,但STM32新工程的建立过程有些复杂,可以利用例程直接编写。