单片机定时器多时段循环控制C程序89C2051.docVIP

  • 8
  • 0
  • 约4.55千字
  • 约 6页
  • 2017-06-14 发布于河南
  • 举报

单片机定时器多时段循环控制C程序89C2051.doc

单片机定时器多时段循环控制C程序89C2051

2011-12-21 12:46 单片机定时器多时段循环控制C程序 这是一段多时段定时(延时)程序,硬件组成为AT89C2051和前文提到的两位LED数码管,数码管的显示数据由一片74LS164经串口传输,(注:并非本人习惯使用164,盖因本人手中有几片这样的成品模块,弃之可惜。)另外由两个I/O口控制两位LED数码管的供电,端口分配相见程序,这是一段在用程序,正用于工作间的自动引排风系统,由于手边没有合用的空气检测传感器,只好采用定时启动的方法进行控制,并设置为:早晨有其他设备运行时,系统得电开始运行,经初次的90分钟倒计时延时后启动风机运转,风机运转10分钟后停止进入待机延时,待机40分钟后再次启动风机运转,此后,程序在40分与10分之间转换进行待机和运转的控制,直至所有设备停止(下班了!)后断电;程序主架构采用的是前文“单片机数码时钟带闹铃的C程序”,起初以为,定时控制程序应该很好弄的,但是现在才发现,“简单、容易”永远是深谙编程的人们的专利,对于我这般满脑子外行想法及编程语言都没学全的菜鸟就满不是那么回事了,仅主函数中的那几个选择结构就弄了好几天;另外,以前使用AT89C2051时,并未用全其P1端口,没出过问题,也就没有认真研究其端口结构,正是这个原因导致程序写好后又被乱码纠缠了好久,直到发现其P1.0和P1.1口还有其他功能,需要加入上拉电阻时,才调试完成;但好在程序最终还是按照自己的意愿运行了,累与烦恼也就变成快乐了,谁让咱拿这东东当‘玩意’了呢,累之于斯,乐之于斯,于心坦然。 装置由两位LED数码管显示分钟,倒计时显示,最大设定值99分钟,个位数码管的dp段间隔一秒亮/灭闪动,一个选择按键和加减按键配合可随时修改设定时间,一个即时按键可随时控制风机启动运转。程序如下: /*******2011/12/18   原创:wannenggong**************/ #includeat89x51.h #define uint unsigned int        #define uchar unsigned char #define u_s 47575 //经校准后的50MS初值; /***********I/O口位功能定义*****************************/ sbit beep=P1^7; //提示音输出端 sbit pw_out=P1^6; //继电器控制 sbit H=P1^5;  //十位显示供电控制 sbit M=P1^4;  //个位显示供电控制 sbit N4=P1^3;     //即使启动键 sbit N2=P1^2;     //加1调整 sbit N3=P1^1;     //减1调整 sbit N1=P1^0;  //调整项选择 /************应用变量设置*******************************/ uchar T,r=0;           //按键计数变量 uchar s,u,LD,TD,Time;        //过渡变量 uchar minute,second,ON_time=10,OFF_time=40; //时间变量 uchar ms,count;          //标志变量 /**********低电平有效不显示小数点的0-9显示段码**********/ uchar SEG7[10]=   {0x24,0x7d,0x16,0x15,0x4d,0x85,0x84,0x3d,0x04,0x05}; /**********低电平有效带小数点显示的0-9显示段码**********/ uchar SEG7_dp[10]=   {0x20,0x79,0x12,0x11,0x49,0x81,0x80,0x39,0x00,0x01}; /***************延时:12MHZ约pMS*************************/ void delay (uint p) {   uchar i;  while( --p != 0)  {    for(i = 0; i 125; i++);     } } /***********发声函数用微秒延时函数**********************/ void Delay_us(int num) { while(num--); } /*********设置选择函数************************************/ void Choice_set() {  if (N1==0)//选择键    {  delay(10);        if(N1==0)     {        r++;       if(r2

文档评论(0)

1亿VIP精品文档

相关文档