久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)按鍵搶答器程序

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月15日   【字體:

本程序由好幾個(gè)頭文件組成,都在下面,你可以復(fù)制代碼并保存為獨(dú)立的文件
頭文件STC12C5A.H下載: http://www.zg4o1577.cn/mcu/2564.html

#include <STC12C5A.H>
#include "stdio.h"
#include "LCD1602.h"
#include "interrupt.h"
#include "chiclet_keyboard.h"
#define uchar unsigned char
#define uint unsigned int
void main()
{
 delay(500);
 LCD_init();
 interrupts_init();
 chiclet_keyboard_();
 EA=0;
 while(1);
}

#ifndef _LCD1602_H
#define _LCD1602_H
/*
單片機(jī):STC89CXX, 晶體: 12M  編譯:KEIL uVision4
LCD1602命令代碼:
 代碼     說(shuō)明
 1  清除顯示
 2  光標(biāo)復(fù)位
輸入模式選擇:
 X  0000 01(I/D)S
   I/D:光標(biāo)移動(dòng)方向,1右移,0左移
   S:屏幕文字是否移動(dòng).1移動(dòng).
顯示開(kāi)/關(guān)控制:
 X       0000 1DCB
   D:整體顯示開(kāi)關(guān),1為開(kāi)
   C:光標(biāo)開(kāi)關(guān),1為開(kāi)
   B:光標(biāo)閃爍,1為閃爍
光標(biāo)或字符移位:
 X  0001 (S/C)(R/L)**
   S/C: 1時(shí)移動(dòng)文字,0時(shí)移動(dòng)光標(biāo)
   R/L:1為右移,0為左移
功能設(shè)置:
 X  001(DL) NF**
   DL:1為8線模式,0為4線模式
   N: 0為單行顯示,1為2行顯示
   F: 0為5X7字符,1為5X10字符
字符地址:
 X  01xx xxxx
   xxxxx:對(duì)應(yīng)的ASCII地址
顯示地址:
 X  1xxx xxxx
   xxx xxxx:屏幕顯示地址
內(nèi)部顯示和屏幕的地址對(duì)應(yīng)注明:
     00--0x0F 對(duì)應(yīng)屏幕第一行,00--0x27內(nèi)部第一行
     0x40--0x4F對(duì)應(yīng)屏幕第二行,0x40--0x67內(nèi)部第二行
*/
#define uchar unsigned char
#define uint unsigned int
//定義硬件接口
#define LCD_DATA  P0
sbit LCD_EN=P2^5;
sbit LCD_RS=P2^3;
sbit LCD_RW=P2^4;
/**********************************************
函數(shù)名稱:
函數(shù)功能:
函數(shù)調(diào)用:
輸入?yún)?shù):
輸出參數(shù):
版權(quán)信息:
時(shí)間版本:   V1.0
***********************************************/
/**********************************************
函數(shù)名稱: delay_ms(uint num)
函數(shù)功能: 延時(shí)
函數(shù)調(diào)用:
輸入?yún)?shù): ms
輸出參數(shù):
版權(quán)信息:
時(shí)間版本: V1.0
備注:     晶體:12M
***********************************************/
void delay_ms(uint temp)
{
 uint x,y;
 for(x=temp;x>0;x--)
  for(y=110;y>0;y--);
}
/**********************************************
函數(shù)名稱: write_com(uchar com)
函數(shù)功能: 寫命令
函數(shù)調(diào)用: delay_ms(uint num)
輸入?yún)?shù): 命令代碼
輸出參數(shù):
版權(quán)信息:
時(shí)間版本:  V1.0
***********************************************/
void LCD_w_com(uchar com)
{
 LCD_RS=0;
 LCD_RW=0;
 LCD_DATA=com;
 delay_ms(5);
 LCD_EN=1;
 delay_ms(5);
 LCD_EN=0;
}
/**********************************************
函數(shù)名稱:write_data(uchar date)
函數(shù)功能:寫數(shù)據(jù)
函數(shù)調(diào)用:delay_ms(uint num)
輸入?yún)?shù):數(shù)據(jù)
輸出參數(shù):
版權(quán)信息:
時(shí)間版本:  V1.0
***********************************************/
void LCD_w_data(uchar dat)
{
 LCD_RS=1;
 LCD_RW=0;
 LCD_DATA=dat;
 delay_ms(5);
 LCD_EN=1;
 delay_ms(5);
 LCD_EN=0;
}
/**********************************************
函數(shù)名稱:
函數(shù)功能:LCD_init()
函數(shù)調(diào)用:LCD_w_com()
輸入?yún)?shù):
輸出參數(shù):
版權(quán)信息:
時(shí)間版本: V1.0
***********************************************/
void LCD_init()
{
 LCD_EN=0;
 LCD_w_com(0x38);//8線2行5X7字符模式
 LCD_w_com(0x0c);//顯示開(kāi),光標(biāo)不顯示,光標(biāo)不閃爍
 LCD_w_com(0x06);//光標(biāo)右移,文字不移動(dòng)
 LCD_w_com(0x01);//清除顯示,光標(biāo)復(fù)位 
}
/**********************************************
函數(shù)名稱: LCD_disp_cher(uchar x,uchar y,uchar *p)
函數(shù)功能: 指定位置顯示字符串
函數(shù)調(diào)用: LCD_w_com(),LCD_w_data()
輸入?yún)?shù): x,y坐標(biāo),字符串指針數(shù)組
輸出參數(shù):
版權(quán)信息:
時(shí)間版本: V1.0
備注:    x為列,x<16,y為行,y<2. 字符串長(zhǎng)+x不大于16.
***********************************************/
void LCD_disp_cher(uchar x,uchar y,uchar *p)
{
 if(y==1)
 {  
  LCD_w_com(0x80+x);
  while(*p)
  {
  LCD_w_data(*p);
  p++;
  }
 }
 if(y==2)
 {   
  LCD_w_com(0x80+0x40+x);
  while(*p)
  {
  LCD_w_data(*p);
  p++;
  }
 }
}
#endif//end LCD1602.H


#ifndef _interrupt_H_
#define _interrupt_H_
#define uint unsigned int
#define uchar unsigned char
uint sec=10;
sbit sb=P1^0;
sbit si=P1^1;
void interrupts_init()
{
 EA=1;   //開(kāi)總中斷
 ET0=1;   // T0(定時(shí)中斷0) 的溢出中斷允許位
 TR0=1;   //0的運(yùn)行控制位
 TMOD=0x1;  //16位定時(shí)器 
 TH0=(65536-50000)/255;
 TL0=(65536-50000)%255;
}
void ghjfgf() interrupt 1
{
 uint subtle;
 TH0=(65536-50000)/255;
 TL0=(65536-50000)%255;
 subtle++;
 if(subtle==20)
  {
   subtle=0;
   sec--;
  }
}
#endif

#ifndef _chiclet_keyboard_H_
#define _chiclet_keyboard_H_
sbit S1=P3^4; //獨(dú)立按鍵S1~S4
sbit S2=P3^5;
sbit S3=P3^6;
sbit S4=P3^7; //用復(fù)位鍵退出這樣節(jié)省按鍵
void delay(uint ms)   //延時(shí)
{
 uchar mus;
 for(ms; ms>0; ms--)
  for(mus=110; mus>0; mus--);
}
uint chiclet_keyboard_() //按鍵檢測(cè)子程序有返回值用于退出該子程序
{
 uchar dsa[10];   //用于儲(chǔ)存顯示的數(shù)組
 while(1)    //檢測(cè)死循環(huán),直至檢測(cè)道按鍵或時(shí)間到sec=0;
 {
  if(S1==0)
  {
   delay(5);
   if(S1==0)
   {
    LCD_disp_cher(0,1,"      S1      "); //顯示先按的按鍵
    return 0;
   }
  }
  if(S2==0)
  {
   delay(5);
   if(S2==0)
   {
    LCD_disp_cher(0,1,"     S2    "); //顯示先按的按鍵
    return 0;
   }
  }
  if(S3==0)
  {
   delay(5);
   if(S3==0)
   {
    LCD_disp_cher(0,1,"     S3    "); //顯示先按的按鍵
    return 0;
   }
  }
  if(S4==0)
  {
   delay(5);
   if(S4==0)
   {
    LCD_disp_cher(0,1,"    S4    "); //顯示先按的按鍵
    return 0;
   }
  }
  if(sec==0)
   {
    LCD_disp_cher(0,1,"  over  time  ");
    return 0;
   }
  sprintf(dsa,"  time  %d  ",sec);   //顯示時(shí)間
  LCD_disp_cher(0,1,dsa);
 }
}
#endif

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 久久精品国产免费一区二区三区 | 欧美亚洲第一区 | 亚洲一区二区三区免费观看 | 免费中文字幕 | 国产视频福利一区 | 亚洲成人免费网址 | 国产美女在线看 | 国产精品久久久久久久久久久久冷 | 国产精品福利在线观看 | 久热精品在线 | 中文字幕av网址 | 性一爱一乱一交一视频 | 国产午夜精品视频 | www.国产91| 成人在线精品视频 | 亚洲3级 | 99欧美精品 | 亚洲精品福利在线 | 精品一区二区三区在线观看 | 日韩小视频 | 97国产精品视频人人做人人爱 | 精品视频在线免费观看 | 一级欧美一级日韩片免费观看 | 国产69久久精品成人看动漫 | 在线观看特色大片免费网站 | 日韩精品av一区二区三区 | 欧美精品一区二区三区在线播放 | 91精品一区二区三区久久久久 | 免费看片在线播放 | 国产女人与拘做受免费视频 | 99reav| 久久久久久国产精品久久 | 91亚洲一区| 九九免费在线视频 | 欧美在线精品一区 | 日韩视频a | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲乱码一区二区三区在线观看 | 亚洲视频在线播放 | 精品欧美视频 | 请别相信他免费喜剧电影在线观看 |