带液晶显示驱动的智能电梯控制器
以上的字符发送到液晶显示模块之后,可以显示“ it is closing.. ” 最后会显示下列字符,电梯重新回到初始等待状态:
以上可以显示“ it is static.. ”
说明:由于LCD显示波形会占用比较多的空间,所以以上我仅以在高层有向下
的请求为例来说明,电梯的状态完全可以通过LCD来正确地显示出来。鉴于此,我的下面的波形将不展示LCD显示部分的波形图。
(3)当电梯停在6楼处于等待状态时,在1楼和2楼同时有向上的请求时:
- 11 -
带液晶显示驱动的智能电梯控制器
(4)当电梯停在1楼处于等待状态时,在6楼和5楼同时有向下的请求时:
- 12 -
带液晶显示驱动的智能电梯控制器
(5)当电梯停在6楼时,有在5楼的向下的请求时,电梯应该先到五楼,电梯内部请求到1楼,如果电梯在下降的过程中,有在2楼的向上的请求时,电梯应该先相应内部请求,然后相应外部请求:
(6)电梯的强制运行按钮forbid:
- 13 -
带液晶显示驱动的智能电梯控制器
说明:由于电梯在实际运行的过程中,会遇到的情况种类很多,所以我在此
不会一一例举,在上面,我以几种的典型的情况展示了我设计的智能电梯控制器的运行状态的正确转换。如果读者想要试试其它的几种情况,可以自己运行一下我的程序(附下或已打包)。
3.智能电梯综合后的整体电路图
OUTPUTover_alarmPIN_AE23OUTPUTfloor_digtal[3..0]Parameter.Value...elevator_controlercp_50MINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCarbitratorcp_50Mclkresetforbidcal_up_1cal_up_2cal_up_3cal_up_4cal_up_5cal_down_2cal_down_3cal_down_4cal_down_5cal_down_6request_1request_2request_3request_4request_5request_6keyINPUTVCCDE2_Defaultopen_enablestop_enableup_enabledown_enableclose_enableopen_enablestop_enableup_enabledown_enableclose_enableCLOCK_50KEYLCD_ONLCD_BLONLCD_RWLCD_ENLCD_RSLCD_DATA[7..0]LUT_DATA[8..0]LUT_INDEX[5..0]mLCD_ST[5..0]mDLY[17..0]mLCD_StartmLCD_DATA[7..0]mLCD_RSI2C_SDATI2C_SCLKnst4OUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTfloor_digtal[3..0]LiftState[6..0]over_alarmcount[2..0]elevator_state[6..0]count_in[2..0]LCD_ONLCD_BLONPIN_N2clkresetPIN_V2PIN_V1PIN_N25PIN_N26PIN_P25PIN_AE14PIN_AF14PIN_AD13PIN_AC13PIN_C13PIN_B13PIN_A13PIN_N1PIN_P1PIN_P2PIN_T7PIN_U3PIN_U4forbidcal_up_1cal_up_2cal_up_3cal_up_4cal_up_5cal_down_2cal_down_3LCD_RWLCD_ENLCD_RSOUTPUTOUTPUTPIN_L4PIN_K2PIN_K4PIN_K3OUTPUTnst1LCD_DATA[7..0]LUT_DATA[8..0]LUT_INDEX[5..0]mLCD_ST[5..0]mDLY[17..0]PIN_G26cal_down_4cal_down_5cal_down_6request_1request_2request_3request_4request_5request_6mLCD_StartmLCD_DATA[7..0]mLCD_RSOUTPUTI2C_SDATI2C_SCLKPIN_B6PIN_A6PIN_K1PIN_J1PIN_J2PIN_H1PIN_H2PIN_J4PIN_J3PIN_H4PIN_H3nst
4 基于SD卡的数码音乐播放器程序设计与注释
#include \#include \#include \#include \
int main(void) {
UINT16 i=0,Tmp1=0,Tmp2=0,k=0,count; float stamp[38]={10,15,20,26, 32,37,44,48,
49,
55,60,67,71, 72,78,84,89, 95,102,106,107, 112,118,125,148, 153,158,164,171, 175,176,181,187, 194,199,204,210, 217};
// 这个数组我是根据“千千静听”软件中所
- 14 -
带液晶显示驱动的智能电梯控制器
//提供的歌词时间戳来记录的,就是指不同//的时间点对应于不同的歌词。其中的标准//参照时间我是根据首次放歌经验校准的。 UINT32 j=720;
BYTE Buffer[512]={0};//设置缓存 while(SD_card_init())//SD初始化 usleep(500000);//延时 LCD_Test();//LCD显示
for(count=0;count<38;count++) {
//usleep(50000); LCD_Init();
LCD_Show_Text(\ LCD_Line2();
LCD_Show_Text(\ }//显示歌名和歌手
if(k==(UINT16)stamp[1]) {
{
stamp[count]=((stamp[count])/(10))*3748; }
while(1) {
SD_read_lba(Buffer,j,1); while(i<512) {
if(!IORD(AUDIO_0_BASE,0)) {
Tmp1=(Buffer[i+1]<<8)|Buffer[i]; IOWR(AUDIO_0_BASE,0,Tmp1); i+=2; } }
if(k==1000) {
// usleep(50000); LCD_Init(); LCD_Line2();
LCD_Show_Text(\ } //显示作者 if(k==2000) {
//usleep(50000); // LCD_Init(); LCD_Line2();
LCD_Show_Text(\ \
LCD_Line2();
LCD_Show_Text(\ }//显示合作者
if(k==(UINT16)stamp[0])
- 15 -
//usleep(50000); LCD_Init();
LCD_Show_Text(\ LCD_Line2();
LCD_Show_Text(\}//显示歌词
if(k==(UINT16)stamp[2]) {
//usleep(50000); LCD_Init();
LCD_Show_Text(\ LCD_Line2();
LCD_Show_Text(\}//显示歌词
if(k==(UINT16)stamp[3]) {
//usleep(50000); LCD_Init();
LCD_Show_Text(\ LCD_Line2();
LCD_Show_Text(\}//显示歌词
if(k==(UINT16)stamp[4]) {
//usleep(50000); LCD_Init();
LCD_Show_Text(\ LCD_Line2();
LCD_Show_Text(\}//显示歌词
if(k==(UINT16)stamp[4]+1000) {
LCD_Init();
LCD_Show_Text(\