久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)8層電梯源程序
[打印本頁(yè)]
作者:
51黑電子迷
時(shí)間:
2017-5-4 01:03
標(biāo)題:
單片機(jī)8層電梯源程序
一個(gè)單片機(jī)8層電梯模擬系統(tǒng)源程序:
#include <reg52.h> //調(diào)用單片機(jī)頭文件
#define uchar unsigned char //無(wú)符號(hào)字符型 宏定義 變量范圍0~255
#define uint unsigned int //無(wú)符號(hào)整型 宏定義 變量范圍0~65535
//數(shù)碼管段選定義 0 1 2 3 4 5 6 7 8 9
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xdf,0xdb
// A B C D E F 不顯示
}; //斷碼
uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
bit flag_100ms,flag_1s;
bit flag_stop = 1; //用做到了相應(yīng)的樓停下
sbit beep = P2^6;
sbit xia = P2^0;
sbit zhong = P2^1;
sbit shang = P2^2;
uchar value2;
sbit led1 = P1^7; //8個(gè)發(fā)光二極管定義
sbit led2 = P1^6;
sbit led3 = P1^5;
sbit led4 = P1^4;
sbit led5 = P1^3;
sbit led6 = P1^2;
sbit led7 = P1^1;
sbit led8 = P1^0;
uchar dt_1; //1樓電梯標(biāo)志位
uchar dt_2; //2樓電梯標(biāo)志位
uchar dt_3; //3樓電梯標(biāo)志位
uchar dt_4; //4樓電梯標(biāo)志位
uchar dt_5; //5樓電梯標(biāo)志位
uchar dt_6; //6樓電梯標(biāo)志位
uchar dt_7; //7樓電梯標(biāo)志位
uchar dt_8; //8樓電梯標(biāo)志位
uchar dt_value = 1; //電梯到哪一層的變量
uchar dt_s_x ; //電梯上下的標(biāo)志位
/***********************1ms延時(shí)函數(shù)*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/********************獨(dú)立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨(dú)立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P3 |= 0xff;
if(P3 != 0xff) //按鍵按下
{
delay_1ms(1); //按鍵消抖動(dòng)
if((P3 != 0xff) && (key_new == 1))
{ //確認(rèn)是按鍵按下
key_new = 0;
switch(P3)
{
case 0xfe: key_can = 1; break; //得到按鍵值
case 0xfd: key_can = 2; break; //得到按鍵值
case 0xfb: key_can = 3; break; //得到按鍵值
case 0xf7: key_can = 4; break; //得到按鍵值
case 0xef: key_can = 5; break; //得到按鍵值
case 0xdf: key_can = 6; break; //得到按鍵值
case 0xbf: key_can = 7; break; //得到按鍵值
case 0x7f: key_can = 8; break; //得到按鍵值
}
}
}
else
key_new = 1;
}
void key_with()
{
if(key_can == 1)
{
led1 = 1; //點(diǎn)亮發(fā)光二極管
dt_1 = 1; //
}
if(key_can == 2)
{
led2 = 1; //點(diǎn)亮發(fā)光二極管
dt_2 = 1;
}
if(key_can == 3)
{
led3 = 1; //點(diǎn)亮發(fā)光二極管
dt_3 = 1;
}
if(key_can == 4)
{
led4 = 1; //點(diǎn)亮發(fā)光二極管
dt_4 = 1;
}
if(key_can == 5)
{
led5 = 1; //點(diǎn)亮發(fā)光二極管
dt_5 = 1;
}
if(key_can == 6)
{
led6 = 1; //點(diǎn)亮發(fā)光二極管
dt_6 = 1;
}
if(key_can == 7)
{
led7 = 1;
dt_7 = 1;
}
if(key_can == 8)
{
led8 = 1;
dt_8 = 1;
}
}
/*********************當(dāng)電梯不動(dòng)時(shí)、判斷是向上、還是向下**********************/
void tiandi_shang_xia()
{
static uchar value;
if(dt_s_x == 0)
{
flag_stop = 1;
if(dt_value == 1) //電梯在第1層停下不走了
{
value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
}
if(dt_value == 2) //電梯在第2層停下不走了
{
value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 3) //電梯在第3層停下不走了
{
value = dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 4) //電梯在第4層停下不走了
{
value = + dt_5 + dt_6 + dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2 + dt_3;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 5) //電梯在第5層停下不走了
{
value = dt_6 + dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2 + dt_3 + dt_4;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 6) //電梯在第6層停下不走了
{
value = dt_7 + dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 7) //電梯在第7層停下不走了
{
value = dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
if(dt_value == 8) //電梯在第8層停下不走了
{
value = dt_8;
if(value != 0)
{
dt_s_x = 1; //電梯向上走
shang = 0; //顯示上
zhong = 0;
xia = 1;
}
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6;
if(value != 0)
{
dt_s_x = 2; //電梯向下走
xia = 0; //顯示下
zhong = 0;
shang = 1;
}
}
}
}
/****************電梯向上、做最后的判斷是否還要繼續(xù)向上****************/
void dt_shang_guan()
{
uchar value;
if(dt_s_x == 1) //電梯向上 做最后的判斷是否還要繼續(xù)向上
{
if(dt_value == 1) //在第1層
{
value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 2) //在第2層
{
value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 3) //在第3層
{
value = + dt_6 + dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 4) //在第4層
{
value = dt_5 + dt_6 + dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 5) //在第5層
{
value = dt_6 + dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 6) //在第6層
{
value = dt_7 + dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 7) //在第7層
{
value = dt_8;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 8) //在第8層
{
dt_s_x = 0; //電梯停下不動(dòng)了
shang = 1; //關(guān)閉上字
zhong = 1;
}
}
}
/****************電梯向下、做最后的判斷是否還要繼續(xù)向下****************/
void dt_xia_guan()
{
uchar value;
if(dt_s_x == 2) //電梯向下 做最后的判斷是否還要繼續(xù)向下
{
if(dt_value == 1) //在第1層
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
flag_stop = 1;
}
else if(dt_value == 2) //在第2層
{
value = dt_1;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 3) //在第3層
{
value = dt_1 + dt_2;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 4) //在第4層
{
value = dt_2 + dt_3;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 5) //在第5層
{
value = dt_1 + dt_2 + dt_4;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 6) //在第6層
{
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 7) //在第7層
{
value = dt_1 + dt_2 + dt_4 + dt_5+ dt_6;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 8) //在第8層
{
value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7;
if(value == 0) //說(shuō)明上面沒(méi)有人按下
{
dt_s_x = 0; //電梯停下不動(dòng)了
xia = 1; //關(guān)閉上字
zhong = 1;
}else
flag_stop = 1;
}
}
}
/***********************電梯處理函數(shù)************************/
void td_dis()
{
uchar value,value1;
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
if(value != 0)
{ //100ms
if(flag_stop == 1) //到相應(yīng)的樓了 要停下
{
/***************************向上走電梯***********************************/
if(dt_s_x != 0) //向上走電梯
{
value1 ++;
if(value1 >= 10) //1s
{
value1 = 0;
if(dt_s_x == 1) //向上走電梯
{
dt_value ++;
shang = 0; //顯示上字
zhong = 0;
}
if(dt_s_x == 2) //向下走電梯
{
dt_value --;
xia = 0; //顯示下字
zhong = 0;
}
if(dt_value == 1) //當(dāng)?shù)搅说谝粚拥臅r(shí)候
{
if(dt_1 == 1)
{
led1 = 0; //關(guān)閉第一層發(fā)光二極管
dt_1 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 2) //當(dāng)?shù)搅说诙䦟拥臅r(shí)候
{
if(dt_2 == 1)
{
led2 = 0; //關(guān)閉第二層發(fā)光二極管
dt_2 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 3) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_3 == 1)
{
led3 = 0; //關(guān)閉第3層發(fā)光二極管
dt_3 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 4) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_4 == 1)
{
led4 = 0; //關(guān)閉第4層發(fā)光二極管
dt_4 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 5) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_5 == 1)
{
led5 = 0; //關(guān)閉第5層發(fā)光二極管
dt_5 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 6) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_6 == 1)
{
led6 = 0; //關(guān)閉第6層發(fā)光二極管
dt_6 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 7) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_7 == 1)
{
led7 = 0; //關(guān)閉第7層發(fā)光二極管
dt_7 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
else if(dt_value == 8) //當(dāng)?shù)搅说?層的時(shí)候
{
if(dt_8 == 1)
{
led8 = 0; //關(guān)閉第8層發(fā)光二極管
dt_8 = 0; //清零電機(jī)在的標(biāo)志
flag_stop = 0; //到停下
beep = 0; //打開(kāi)蜂鳴器
}
}
}
}
}
}
if(flag_stop == 0)
{
value2 ++;
if(value2 % 5 == 0)
{
if(dt_s_x == 1) //上
{
shang = ~shang;
zhong = ~zhong;
}
if(dt_s_x == 2) //下
{
zhong = ~zhong;
xia = ~xia;
}
}
if(value2 >= 10) //1.0s
{
beep = 1; //關(guān)閉蜂鳴器
}
if(value2 >= 20) //100ms*20 = 2秒
{
value2 = 0;
dt_shang_guan(); //電梯向上 做最后的判斷是否還要繼續(xù)向上
dt_xia_guan(); //電梯向下 做最后的判斷是否還要繼續(xù)向下
}
}
}
/*************定時(shí)器0初始化程序***************/
void time_init()
{
EA = 1; //開(kāi)總中斷
TMOD = 0X01; //定時(shí)器0、工作方式1
ET0 = 1; //開(kāi)定時(shí)器0中斷
TR0 = 1; //允許定時(shí)器0定時(shí)
}
/******************主程序**********************/
void main()
{
P1 = 0x00;
P0 = 0X00; //單片機(jī)IO口初始化
time_init(); //定時(shí)器初始化
while(1)
{
key(); //按鍵程序
if(key_can < 20)
{
if(dt_s_x == 0)
{
value2 = 0;
flag_stop = 1;
}
key_with();
}
tiandi_shang_xia(); //當(dāng)電梯不動(dòng)時(shí)、判斷是向上、還是向下
P0 = smg_du[dt_value]; //顯示
if(flag_100ms == 1)
{
flag_100ms = 0;
td_dis(); //電梯處理函數(shù)
}
}
}
/*************定時(shí)器0中斷服務(wù)程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
value ++;
復(fù)制代碼
完整代碼下載:
http://www.zg4o1577.cn/bbs/dpj-38263-1.html
作者:
uaeng
時(shí)間:
2017-5-4 12:04
不錯(cuò)不錯(cuò),復(fù)制研究研究。
作者:
回憶memorize
時(shí)間:
2017-5-4 13:03
不錯(cuò),很有用,好帖子。
作者:
SETBME
時(shí)間:
2017-5-4 15:19
完整里面有重量判斷嗎??
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲精品久久久蜜桃网站
|
一级在线毛片
|
日韩羞羞
|
精品伊人久久
|
久久久精品一区
|
成人激情视频网
|
成年免费大片黄在线观看一级
|
一本一道久久a久久精品综合蜜臀
|
欧美日韩综合一区
|
欧美一区二区三区久久精品
|
精品欧美黑人一区二区三区
|
国产精品成av人在线视午夜片
|
亚洲欧美视频在线观看
|
亚洲人a
|
www.天天干.com
|
高清国产一区二区
|
日韩在线播放av
|
91久久精品国产免费一区
|
国产在线视频一区
|
九色91视频
|
亚洲欧美少妇
|
亚洲v日韩v综合v精品v
|
欧美亚洲国产成人
|
欧美激情99
|
国产资源一区二区三区
|
www亚洲精品
|
久久久久久久夜
|
亚洲在线免费观看
|
国产精品久久国产精品
|
国产三级精品视频
|
一级做a毛片
|
人人爽日日躁夜夜躁尤物
|
日韩中文字幕在线观看
|
亚洲永久精品国产
|
亚洲综合在线播放
|
亚洲一区二区久久
|
国产1区2区3区
|
午夜精品福利视频
|
亚洲日日夜夜
|
欧美成人一区二区
|
亚洲精品国产成人
|