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
在歌星大獎賽中,有10個評委為參賽的選手打分,分數為1~100分。選手最後得分為:去掉一個最高分和一個最低分後其餘8個分數的平均值。同時對評委評分進行裁判,即在10個評委中找出最公平(即評分最接返平均
#include <iostream> using namespace std; int main() {int a[10],f[10],i,k,m,n,b,c,y,p,q,d,average,h,g; cout<<"輸入十位評委按順序的打分:";
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
案例三:小明左右手分別拿兩張紙牌:黑桃10和紅心8,現在交換手中的牌。編寫一個程序模擬這一個過程:兩個整數分別保存在兩個變量中,將這兩個變量的值互換,並輸出互換後的結果。
nbsp 一個 span right static http 變量 pub left package project_03; /** * 2018-9-7 20:19:59 * @author Sauron XiaMen * */ public class Cha
三個例子 —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}
演算法C++實現(有註釋):統計數字某位數的個數,用隨機函式產生100個[0,99]範圍內的隨機整數, 統計數字的個位上的數字分別為0,1,2,3,4,5,6,7,8,9的數的個數,並打印出來。
#include<iostream> #include<cstdlib>// #include <stdlib.h> void srand( unsigned seed ); //功能: 設定rand()隨機序列種子。對於給定的種子se
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() 函式