1. 程式人生 > >P1 接 8 個獨立按鍵,P2 接 8 個 LED,要求用按鍵控制 LED 的發光狀態

P1 接 8 個獨立按鍵,P2 接 8 個 LED,要求用按鍵控制 LED 的發光狀態

/*
P1.0~P1.5 接的 6 個按鍵,分別對應控制 P2.0~P2^5 所接的 6 個 LED。
按一下 P1.0 的按鍵,P2.0 接的 LED 就長亮,重複按一下,LED 就熄滅;
這 6 路都如此控制。

P1.6 和 P1.7 的按鍵控制對應的 P2.6 和 P2.7 所接的 2 個 LED。
但是要求輸出是 100ms 交替閃爍的訊號。

按一下 P1.6 的按鍵,P2.6 接的 LED 就以100ms的間隔閃爍,重複按一下,LED 就熄滅;
P1.7 與 P2.7 的控制關係也是如此。

下列程式已經除錯通過,可以滿足上述要求。
模擬截圖如下:

*/

#include <AT89X51.h>

#include <intrins.h>

#define uchar  unsigned char 

#define uint   unsigned int 

//-----------------------------------------------------------

uchar  aa, bb, cc, dd;     //設定變數.

//-----------------------------------------------------------

void delay(uint ms)

{

    uchar t;

    while(ms--)  for(t = 0; t < 123; t++);

}

//-----------------------------------------------------------

void main(void)

{

    TMOD = 0x01;     // T0定時方式1

    TL0 = (65536 - 50000) % 256; //[email protected]

    TH0 = (65536 - 50000) / 256; 

    TR0 = 1;                //啟動定時器0

    IE  = 0x82;             //中斷允許.

    bb = 0x3f;

    cc = 0;

    while(1) {

      aa = P1;           //讀入按鍵.

      if (aa < 255) {    //如果有按下.

        delay(10);       //延時消抖.

        aa = P1;         //再讀.

        if (aa < 255) {  //如果仍然按下.

          if (aa == 255 - 1)   bb ^= 1;  //根據按鍵,分別處理.

          if (aa == 255 - 2)   bb ^= 2;  //這裡也可以使用 case 語句.

          if (aa == 255 - 4)   bb ^= 4;

          if (aa == 255 - 8)   bb ^= 8;

          if (aa == 255 - 16)  bb ^= 16;

          if (aa == 255 - 32)  bb ^= 32;

          if (aa == 255 - 64)  bb ^= 64;

          if (aa == 255 - 128) bb ^= 128;

          P2 = (cc & 0xc0) + (bb & 0x3f);//輸出.

          while(aa < 255)  aa = P1;      //等待按鍵鬆開.

    } } }

}

//-----------------------------------------------------------

void T0_INT() interrupt 1

{

    TL0 = (65536 - 50000) % 256; //[email protected]

    TH0 = (65536 - 50000) / 256; 

    dd++;

    dd %= 4;                     //4,代表200ms

    if (dd == 0) {               //如果時間到了.

      if ((bb & 64) == 64)    cc ^= 64;  //按照指定位取反.

      else                    cc |= 64;  //關閉指定位.

      if ((bb & 128) == 128)  cc ^= 128;

      else                    cc |= 128; //關閉指定位.  

      P2 = (cc & 0xc0) + (bb & 0x3f); //輸出.

    }

}

//----------------------------------------------------------- 

//提問者對於答案的評價:程式很好,因為有了你的無私幫助,讓我們這些菜鳥更快的融入微控制器世界,感謝。

相關推薦

P1 8 獨立按鍵P2 8 LED要求按鍵控制 LED發光狀態

/*P1.0~P1.5 接的 6 個按鍵,分別對應控制 P2.0~P2^5 所接的 6 個 LED。按一下 P1.0 的按鍵,P2.0 接的 LED 就長亮,重複按一下,LED 就熄滅;這 6 路都如

輸入5門學科的成績編寫程式求其平均分。要求函式完成科目存放在指標申請的動態空間中。

#include<iostream> using namespace std; double pj(double pa[]);//定義一個計算平均值的函式; int main() { double *pa=new double[5];//分配五個記憶體空間; int i; do

輸入兩個數A,B輸出A+B的值2(數字控制組數)

答案:import java.util.ArrayList; import java.util.Scanner; public class Text10021 {public static void main(String[] args) {Scanner sc = ne

c程序設計 8.15寫幾函數:①輸職工的姓名和職工號;②按職工號由小到大順序排序姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名從主函數輸入要查找的職工號輸出該職工

xmx ebr ckey ros lbp loj ase vfk cu2 8.15寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名, 從主函數輸入要查找的職工號,輸出該職工。 寫的時候為

Java集合框架上機練習題:編寫一個Book類該類至少有name和price兩屬性。該類要實現Comparable口的compareTo()方法.....

ext .cn 數據庫 識別 方法 屬性 set package compareto 編寫一個Book類,該類至少有name和price兩個屬性。該類要實現Comparable接口,在接口的compareTo()方法中規定兩個Book類實例的大小關系為二者的price屬性的

單進程、多線程並發、多線程分別實現爬一個或多網站的所有鏈瀏覽器打開所有鏈並保存截圖 python

app imp mat 並發執行 cut h+ chrome 鏈接 目錄 #coding=utf-8import requestsimport re,os,time,ConfigParserfrom selenium import webdriverfrom multipr

例子 —JAVA發送http get/post請求調http口、方法

客戶 trace some php += dom 取數據 響應頭 get方法 三個例子 —JAVA發送http get/post請求,調用http接口、方法 例1:使用 HttpClient import java.io.ByteArrayInputStream; imp

Centos7.2安裝MariaDB數據庫並編寫第一數據庫的PHP程序

nic inf ref ren del all htm gin 創建 一、首先在Vmware上新建虛擬機安裝CentOS7.2,root用戶登錄:(我是mini安裝,安裝過程就略去了): 二、MariaDB的安裝與簡易配置: 1、執行安裝命令: yum -y ins

8只有程式設計師才會養成的習慣中了一半的都是大佬!

我們都知道,程式設計師是項邏輯嚴謹有需要高超技術的職業,就因為工作的需要不斷的思考,很多程式設計師都會比較的沉默寡言,而一動起手來,那超強的執行力瞬間就能夠折服許多人。 就是在這種常年的程式設計生涯,程式設計師們慢慢的養成了一些他們這個職業特有的一些習慣,而越是高階的程式設計師這種習慣越加能夠放

8.14 有一個班3學生各學4門課計算總平均分數以及第n學生的成績。

解題思路:這個題目是很簡單的。本例用指向陣列的指標作函式引數。用函式average求總平均成績,用函式search找出並輸出第i個學生的成績。 #include <stdio.h> int main() {void average(float *p,int n

雲棲專輯 | 阿里開發者們的第8感悟:在資訊大爆炸的時代保持專注度顯得尤為可貴

2015年12月20日,雲棲社群上線。2018年12月20日,雲棲社群3歲。 阿里巴巴常說“晴天修屋頂”。 在我們看來,寒冬中,最值得投資的是學習,是增厚的知識儲備。 所以社群特別製作了這個專輯——分享給開發者們20個彌足珍貴的成長感悟,50本書單。 多年以後,再回首2018-19年,留給我們自

15獨立站運營技術詳解一步到位提高訂單轉化率

跨境電商十幾年的發展演變,獨立站也得到了不斷地完善和升級。相比於獨立站賣家在初期獲得流量的單一模式,在先行者們不停摸索中,有越來越多的方法可供學習,在獲取更多流量的同時,如何提高轉化率已成為重中之重。shopyy資深運營教你玩轉獨立站。 引流方面需要考慮到以下幾個問題: 第一是流量天

華為面試題(8分鐘寫出程式碼) 有兩陣列a,b大小都為n,陣列元素的值任意無序; 要求:通過交換a,b中的元素使陣列a元素的和與陣列b元素的和之間的差最小

先上程式碼 java程式碼: public class MinDiff { public static void main(String[] args){ int[] aa={2,5,4,3,1,0}; int[] bb={7,9,8,10,6,11}

win7安裝兩jdk,1.7和1.8下載、安裝、配置環境變數方便切換

之前用過1.6,後來換電腦後用的1.7,由於時代在發展,許多外掛、框架等新的功能需要jdk1.8才能使用,所以就想安裝1.8,不過1.7還不準備解除安裝,就考慮安裝多個jdk.先下載jdk1.8,建議去官網下載,需要oracle賬號,這個可以免費註冊我們選擇jdk1.8版本,

Mac多Python版本共存獨立Python開發環境切換。

一、安裝配置pyenv 經常遇到這樣的情況: 系統自帶的Python是2.x,自己需要Python 3.x,測試嚐鮮;系統是2.6.x,開發環境是2.7.x由於Mac機器系統保護的原因,預設的Python中無法對PIP一些包升級,需要組建新的Python環境。此時需要在

跳水比賽,8個評委打分。運動員的成績是8個成績去掉一個最高分 去掉一個最低分剩下的6分數的平均分就是最後得分。 使用一維陣列 2.請把打最高分的評委和最低分的評委找出來。 3.找出最佳評委

package com.my; import java.io.*; /**  * 1.跳水比賽,8個評委打分。運動員的成績是8個成績去掉一個最高分, 去掉一個最低分,剩下的6個分數的平均分就是最後得分。 使用一維陣列  * 2.請把打最高分的評委和最低分的評委找出來。 3.

第 0001 題:做為 Apple Store App 獨立開發者你要搞限時促銷為你的應用生成啟用碼(或者優惠券)使用 Python 如何生成 200 啟用碼(或者優惠券)?

第 0001 題:做為 Apple Store App 獨立開發者,你要搞限時促銷,為你的應用生成啟用碼(或者優惠券),使用 Python 如何生成 200 個啟用碼(或者優惠券)? 知識點: 1、range生成隨機數 2、int型別轉換成char型別用chr() 函式