欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 交通信號燈程序添加直流電機程序跪求 [打印本頁]

作者: lvzhicheng    時間: 2020-6-3 14:47
標題: 交通信號燈程序添加直流電機程序跪求
求各位大佬我這個程序是交通信號燈,需要在報警的時候加一個直流電機轉動,應該怎樣添加程序
#include<reg52.h>    //頭文件
#include"lcd.h"
typedef unsigned int u16;   //對數(shù)據(jù)類型進行聲明定義
typedef unsigned char u8;
uchar show_l[] = {0x3c,0x42,0x42,0x3c,0x42,0xc3,0x7e,0x24};   //無符號字符型
unsigned char Second[]="Second:         ";  //8
unsigned char Help_msg[]="your call 110  ";
unsigned char Clean_msg[]="                ";
sbit  YELLOW =P1^0;    // 黃燈
sbit  GREEN =P1^1;    // 綠燈
sbit  RED =P1^2;    // 紅燈
sbit  BEEP=P1^4;     //  報警
sbit  KEY_1=P3^4;    //  按鍵1按下紅燈時間增加
sbit  KEY_2=P3^5;    //  按鍵2按下紅燈時間減少
sbit  KEY_3=P1^3;    //  按鍵3按下報警
sbit  E1_138=P3^3;    // 74LS138E1    譯碼器
sbit  A_138=P3^0;    //  74LS138A
sbit  B_138=P3^1;    //  74LS138B
sbit  C_138=P3^2;    //  74LS138C
#define DZ P0 //定義點陣驅動IO
u8 count;
u8 green_count =10;   計時
void leddz_show(uchar *show);
void Timer0Init()   定時器0
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XFC; //給定時器賦初值,定時1ms  高電平
TL0=0X18;     低電平
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器   
}
void Delay10us(u8 z)//延時函數(shù)
{
  u8 x,y;
  for(x=z;x>0;x--)
  for(y=210;y>0;y--);
}
void Delay10Ms(u8 z)//延時函數(shù)
{
        unsigned char i, j;
while(z--)
{
        i = 150;
        j = 200;
        do
        {
                while (--j);
        } while (--i);
}
}
void main()
{
   count=0;// 循環(huán)的周期
         E1_138 = 0;  //關閉點陣顯示
                DZ = 0;
   Timer0Init();//初始化計數(shù)器
         LcdInit();   //LCD1602初始化
   YELLOW = 1; //黃燈關閉
   GREEN  = 1;  //綠燈關閉
         RED    =1;   //紅燈關閉
         LcdWriteStr(1,16,Second); //LCD1602顯示 第一行
   while(1)   無限循環(huán)
   {
                if(KEY_1 & KEY_2 & KEY_3) //如果沒有按鍵按下
                {
                        if( count >= (13+green_count))  //如果計數(shù)超過1個周期重新計數(shù)
                        {
                                count=0;
                        }
                        if(count<10)//如果在15秒以內亮綠燈
                        {
                                LcdWriteCom(0x88);
                                LcdWriteData((10-count)/10+0x30);
                                LcdWriteData((10-count)%10+0x30);
                                GREEN = 1;
                                YELLOW = 1;
                                RED = 0;
                        }
                        else if(count<13)//如果超過15秒低于18秒亮黃燈
                        {
                                LcdWriteCom(0x88);
                                LcdWriteData((13-count)/10+0x30);
                                LcdWriteData((13-count)%10+0x30);
                                GREEN = 1;
                                YELLOW = 0;
                                RED = 1;
                        }
                        else if( count< (green_count+13) )//如果超過紅燈18秒亮紅燈
                        {
                                LcdWriteCom(0x88);
                                LcdWriteData(((13+green_count)-count)/10+0x30);
                                LcdWriteData(((13+green_count)-count)%10+0x30);
                                GREEN = 0;
                                YELLOW =1;
                                RED = 1;
                        }
                }
                else//如果有按鍵按下
                {
                 if(KEY_1 == 0) //如果按下按鍵1
                 {
                         if(green_count<=30) //如果紅燈時間沒有超過30
                         {
                                 green_count ++;  //紅燈時間增加
                         }
                         while(!KEY_1);//等待按鍵1釋放
                 }
                 if(KEY_2  == 0)//如果按下按鍵2
                 {
                         if(green_count>=5)//如果紅燈時間大于5
                         {
                                 green_count --;//紅燈時間減少
                         }
                         while(!KEY_2 == 0); //等待按鍵2釋放
                 }
                 if(KEY_3 == 0)//如果按下按鍵3
                 {
                         BEEP = 0;  //蜂鳴器報警
                         LcdWriteStr(2,16,Help_msg);//顯示報警信息
                         E1_138 = 1;//使能點陣
                         while(!KEY_3)//等待釋放按鍵3
                         {
                                        leddz_show(show_l);
                         }
                         E1_138 = 0;//釋放按鍵后關閉點陣 關閉蜂鳴器 清除LCD1602警報信息
                         BEEP = 1;  蜂鳴器
                         LcdWriteStr(2,16,Clean_msg);   清除
                 }
                }
  }
}   
void Timer0() interrupt 1   中斷函數(shù)0定時器0
{
static u16 i;   兩字節(jié)的無符號整型  靜態(tài)分配
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
i++;
if(i==1000)
{
  i=0;
  count ++;
}
}
void leddz_show(uchar *show)
{
  uchar i;
  for(i =0;i<8;i++)
        {
                P0 = *show++;
                P3 = i | 0XF8;
                Delay10us(10);
                P0 = 0;//消影
        }
}






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1