久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機設計的防誤踩油門系統(tǒng) Proteus仿真程序
[打印本頁]
作者:
御龍啊
時間:
2020-4-4 21:01
標題:
單片機設計的防誤踩油門系統(tǒng) Proteus仿真程序
防誤踩油門系統(tǒng)的設計,基于51單片機的,有原理圖和程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(26.83 KB, 下載次數(shù): 58)
下載附件
2020-4-4 22:01 上傳
單片機源程序如下:
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include <intrins.h> //因為要用到左右移函數(shù),所以加入這個頭文件
#define uchar unsigned char
#define uint unsigned int
#define LCDLCDDisp_Off 0x3e
#define LCDLCDDisp_On 0x3f
#define Page_Add 0xb8//ye
#define LCDCol_Add 0x40//lie
#define Start_Line 0xC0//hang
#define data_ora P0 /*液晶數(shù)據(jù)總線*/
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
sbit beep=P1^1;
sbit moto=P1^0;
sbit LCDMcs=P2^1 ; /*片選1*/
sbit LCDScs=P2^2 ; /*片選2*/
sbit RESET=P2^3 ; /*復位信號*/
sbit LCDDi=P2^4 ; /*數(shù)據(jù)/指令 選擇*/
sbit LCDRW=P2^5 ; /*讀/寫 選擇*/
sbit LCDEnable=P2^6 ; /*讀/寫 使能*/
uchar *tab;
uint k=0;
uint q=0;
uchar code hz1[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 安 --*/
/*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0xFF,0xFF,0x8F,0xEF,0xEF,0x2D,0xF5,0xF3,0x77,0x57,0x67,0x7F,0x7F,0x7F,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void LCDdelay(uchar x)
{
int d;
uchar y;
for(y=0;y<x;y++)
for(d=0;d<10;d++);
}
void CheckState()
{
uchar dat,DATA;//狀態(tài)信息(判斷是否忙)
LCDDi=0; // 數(shù)據(jù)\指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)
LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0
do
{
DATA=0x00;
LCDEnable=1; //EN下降源
LCDdelay(1); //延時
dat=DATA;
LCDEnable=0;
dat=0x80 & dat; //僅當?shù)?位為0時才可操作(判別busy信號)
}
while(!(dat==0x00));
}
void write_com(uchar cmdcode)
{
CheckState();//檢測LCD是否忙
LCDDi=0;
LCDRW=0;
P0=cmdcode;
LCDdelay(1);
LCDEnable=1;
LCDdelay(1);
LCDEnable=0;
}
void write_data(uchar LCDDispdata)
{
CheckState();//檢測LCD是否忙
LCDDi=1;
LCDRW=0;
P0=LCDDispdata;
LCDdelay(1);
LCDEnable=1;
LCDdelay(1);
LCDEnable=0;
}
void init_lcd()
{
LCDdelay(1);
LCDMcs=1;//剛開始關閉兩屏
LCDScs=1;
LCDdelay(1);
write_com(LCDLCDDisp_Off);//寫初始化命令
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(LCDCol_Add+0);
write_com(LCDLCDDisp_On);
}
void Clr_Scr()
{
uchar j,k;
LCDMcs=0; //左、右屏均開顯示
LCDScs=0;
write_com(Page_Add+0);
write_com(LCDCol_Add+0);
for(k=0;k<8;k++)//控制頁數(shù)0-7,共8頁
{
write_com(Page_Add+k); //每頁每頁進行寫
for(j=0;j<64;j++) //每頁最多可寫32個中文文字或64個ASCII字符
{
write_com(LCDCol_Add+j);
write_data(0x00);//控制列數(shù)0-63,共64列,寫點內(nèi)容,列地址自動加1
}
}
}
Disp(uchar page,uchar column, uchar code *word)
{
uchar i;
LCDMcs=0;
LCDScs=1;
write_com(0xb8|page);
write_com(0x40|column);
for(i=0;i<16;i++)
write_data(word[i]);
for(i=32;i<48;i++)
write_data(word[i]);
for(i=64;i<80;i++)
write_data(word[i]);
for(i=96;i<112;i++)
write_data(word[i]);
LCDMcs=1;
LCDScs=0;
write_com(0xb8|page);
write_com(0x40);
for(i=128;i<144;i++)
write_data(word[i]);
for(i=160;i<176;i++)
write_data(word[i]);
for(i=192;i<208;i++)
write_data(word[i]);
for(i=224;i<240;i++)
write_data(word[i]);
LCDMcs=0;
LCDScs=1;
write_com(0xb8|page+1);
write_com(0x40|column);
for(i=16;i<32;i++)
write_data(word[i]);
for(i=48;i<64;i++)
write_data(word[i]);
for(i=80;i<96;i++)
write_data(word[i]);
for(i=112;i<128;i++)
write_data(word[i]);
LCDMcs=1;
LCDScs=0;
write_com(0xb8|page+1);
write_com(0x40);
for(i=144;i<160;i++)
write_data(word[i]);
for(i=176;i<192;i++)
write_data(word[i]);
for(i=208;i<224;i++)
write_data(word[i]);
for(i=240;i<250;i++)
write_data(word[i]);
}
void lcd()
{
init_lcd();
Clr_Scr();
k=0;
for(q=0;q<1;q++)
{
for(k=0xc0;k<0xff;k++)
{
Disp(0,0,hz1);
Disp(2,0,hz2);
Disp(4,0,hz3);
Disp(6,0,hz4);
LCDMcs=0;
LCDScs=0;
write_com(k);
LCDdelay(2);
}
}
}
unsigned char start=0;
unsigned char n=0; //n為節(jié)拍常數(shù)變量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),
0x20, 0x40, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,
0x20, 0x15, 0x20 , 0x1C,
0x20, 0x20, 0x20 , 0x26,
0x40, 0x20, 0x20 , 0x2B,
0x20, 0x26, 0x20 , 0x20,
0x20, 0x30, 0x80 , 0xFF,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x80,
0x20, 0x30, 0x1C , 0x10,
0x20, 0x10, 0x1C , 0x10,
0x20, 0x20, 0x26 , 0x20,
0x2B, 0x20, 0x30 , 0x20,
0x2B, 0x40, 0x20 , 0x15,
0x1F, 0x05, 0x20 , 0x10,
0x1C, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x30,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,
0x20, 0x20, 0x26 , 0x40,
0x13, 0x60, 0x18 , 0x20,
0x15, 0x40, 0x13 , 0x40,
0x18, 0x80, 0x00
};
void int0() interrupt 1 //采用中斷0 控制節(jié)拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delaya(unsigned int a)
{
while(a--);
}
void delayb (unsigned char m) //控制頻率延時
{
unsigned b=3*m;
while(--b);
}
void delayc(unsigned char c) //豪秒延時子程序
{
while(--c);
}
void sound()
{
unsigned char p,m; //m為頻率常數(shù)變量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayc(1000); goto play;} //如果碰到結束符,延時1秒,回到開始再來一遍
else if(p==0xff) { i=i+1;delayc(100),TR0=0; goto a;} //若碰到休止符,延時100ms,繼續(xù)取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取頻率常數(shù) 和 節(jié)拍常數(shù)
TR0=1; //開定時器1
while(n!=0) beep=~beep,delayb(m); //等待節(jié)拍完成, 通過P1口輸出音頻
TR0=0; //關定時器1
}
}
void dcmotor()
{
unsigned char j;
moto=0; //關閉電機
for(j=0;j<100;j++) //循環(huán)100次,也就是大約5S
{
moto=1; //開啟電機
delaya(5000); //大約延時50ms
}
moto=0; //關閉電機
}
void keypros()
{
if((k1|k2|k3|k4)==0) //開始
{
delaya(1000);
if((k1|k2|k3|k4)==0)
{
start=1;
}
}
}
void main()
{
while(1)
{
keypros();
if(start==1)
{
lcd();
dcmotor();
sound();
}
else
{
beep=1;
moto=0;
}
}
}
復制代碼
所有資料51hei提供下載:
proteus仿真代碼.zip
(40.9 KB, 下載次數(shù): 20)
2020-4-4 21:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Proteus原理圖.zip
(69.12 KB, 下載次數(shù): 17)
2020-4-4 21:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2020-4-4 22:08
程序有問題吧,無屏幕顯示
作者:
zbfdyw
時間:
2020-4-19 18:04
這個程序和仿真有以下幾個缺陷:1.仿真的時候,屏幕沒有顯示。2.缺少提示和說明,不知道按鍵是做什么的!3.這個防誤踩油門系統(tǒng),怎么工作的?原理如何?一個都不知道!
作者:
zbfdyw
時間:
2020-4-19 22:06
不過還是很感謝你的努力和辛苦,你的程序的借鑒意義是恨到的!再次感謝
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一区
|
婷婷天堂
|
少妇高潮久久久久久潘金莲
|
91看片看淫黄大片
|
色噜噜狠狠一区二区三区
|
久久国产亚洲
|
www.亚洲天堂
|
五月综合色
|
久久久久一
|
成人精品视频在线观看
|
国产美女自拍视频
|
欧美mv日韩mv国产
|
中文字幕在线视频播放
|
亚洲一级黄色片
|
日本丰满少妇做爰爽爽
|
九九久久精品视频
|
日韩一级在线观看
|
久久久亚洲一区
|
欧美一级欧美三级
|
天天干夜夜爽
|
国产在线播放av
|
一级毛片免费播放
|
午夜激情在线
|
av天天干
|
九九99久久
|
狠狠干狠狠插
|
一区二区三区影院
|
日韩专区在线
|
操操av
|
91福利视频导航
|
亚洲精品乱码久久久久久蜜桃91
|
a级片免费观看
|
成人免费视频视频
|
亚洲视频精品
|
中文在线观看免费高清
|
日韩三级精品
|
男女啪啪网站
|
国产乡下妇女做爰视频
|
日韩精品久久久
|
久久一二三区
|
欧美中文字幕在线观看
|