欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
為什么與p2_0有關的都無定義?
[打印本頁]
作者:
1lgy
時間:
2018-1-23 17:25
標題:
為什么與p2_0有關的都無定義?
#include<reg52.h> //包含單片機寄存器的頭文件
#define uchar unsigned char
sbit p2_0 = p2^0;
sbit p2_1 = p2^1;
sbit p2_2 = p2^2;
sbit p2_3 = p2^3;
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/* 函數申明 -----------------------------------------------*/
void delay(uint z);
/* 變量定義 ----------------------------------------------*/
sbit key1=P3^5;
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;
void display()
{
uchar m;
for(m=9;m>0;m--)
{
p0=table[m];
p2_0 =0;
delay(2000);
p2_0 = 1;
}
for(m=0;m<10;m++)
{
p0=table[m];
p2_1=0;
delay(2000);
p2_1= 1;
}
for(m=9;m>0;m--)
{
p0=table[m];
p2_2 = 0;
delay(2000);
p2_2 = 1;
}
for(m=0;m<10;m++)
{
p0=table[m];
p2_3 = 0;
delay(2000);
p2_3 = 1;
}
}
/*
********************************************************************************
** 函數名稱 : main(void)
** 函數功能 : 主函數
********************************************************************************
*/
void main(void)
{
unsigned int a;
P0 = 0;
for(a=100;a>0;a--)
{
display();
}
while(1) //無限掃描
{
if(key1==0)
{
delay(5); //消抖動
if(key1==0) //確認按鍵被按下
{
while(!key1);//松手檢測
P1=0;
delay(200);
P1=0XFF;
}
}
if(key2==0)
{
delay(5); //消抖動
if(key2==0) //確認按鍵被按下
{
while(!key2);//松手檢測
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
}
}
if(key3==0)
{
delay(5); //消抖動
if(key3==0) //確認按鍵被按下
{
while(!key3);//松手檢測
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
if(key4==0)
{
delay(5); //消抖動
if(key4==0) //確認按鍵被按下
{
while(!key4);//松手檢測
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
delay(10);
}
}
/*
********************************************************************************
** 函數名稱 : delay(uint z)
** 函數功能 : 延時函數
********************************************************************************
*/
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
作者:
cccc888
時間:
2018-1-23 18:04
捕獲.PNG
(38.46 KB, 下載次數: 49)
下載附件
2018-1-23 18:03 上傳
大小寫問題
作者:
wulin
時間:
2018-1-23 18:08
字母大小寫錯誤
作者:
HC6800-ES-V2.0
時間:
2018-1-24 10:43
看來你是懂那個“REG52.H”頭文件的作用。
看看我翻譯的REG51.H的內容:
/*--------------------------------------------------------------------------
REG51.H
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* BYTE Register 所有8位寄存器申明*/
sfr P0 = 0x80;//PO口寄存器
sfr P1 = 0x90;//P1口寄存器
sfr P2 = 0xA0;//P2口寄存器
sfr P3 = 0xB0;//P3口寄存器
sfr PSW = 0xD0;//程序狀態寄存器
sfr ACC = 0xE0;//累加器(ACC)
sfr B = 0xF0;//寄存器B 主要用于乘、除等操作
sfr SP = 0x81;//棧指針(SP)
sfr DPL = 0x82;//數據指針(DPTR)是一個16 位的特殊功能寄存器,此為低8位
sfr DPH = 0x83;//此為高8位
sfr PCON = 0x87;//程序計數器(PC)用于保存下一條要執行的指令的地址
sfr TCON = 0x88;//TCON 寄存囂的高4位為定時/計數器控制寄存器,低4位為控制外部中斷的中斷觸發方式選擇
sfr TMOD = 0x89;//TMOD 用于控制定時/計數器的工作方式及4 種工作模式
sfr TL0 = 0x8A;//8051 單片機內含有兩個16 位定時/計數囂,這是第一個定時/計數器賦初值的低位
sfr TL1 = 0x8B;//這是第二個定時/計數器賦初值的低位
sfr TH0 = 0x8C;//這是第一個定時/計數器賦初值的高位
sfr TH1 = 0x8D;//這是第二個定時/計數器賦初值的高位
sfr IE = 0xA8;//IE 寄存器用于開放或屏蔽單片機的各個中斷源
sfr IP = 0xB8;//通過設置IP 寄存器的相應位對各個中斷源的中斷優先級
sfr SCON = 0x98;//寄存器用于設置串行口的工作方式
sfr SBUF = 0x99;//串行數據緩沖器
/* BIT Register 所有寄存器的位申明*/
/* PSW *///通過PSW 的各狀態位,可以實現程序跳轉、多字節運算等功能
sbit CY = 0xD7;//進位標志位,表示在字節運算時發生進位或借位
sbit AC = 0xD6;//輔助進位標志位,當ACC 低4 位發生進位時置位該標志位
sbit F0 = 0xD5;//通用標志位,由用戶定義
sbit RS1 = 0xD4;//工作寄存器組選擇位
sbit RS0 = 0xD3;
sbit OV = 0xD2;//溢出標志位,表示運算時發生溢出
sbit P = 0xD0;//奇偶校驗標志位
/* TCON *///
sbit TF1 = 0x8F;//定時器1中斷標志,定時到,計數滿,為溢出標志,進入中斷服務函數
sbit TR1 = 0x8E;//定時器1開關,1打開,0關閉
sbit TF0 = 0x8D;//定時器0中斷標志,定時到,計數滿,為溢出標志,進入中斷服務函數
sbit TR0 = 0x8C;//定時器0開關,1打開,0關閉
sbit IE1 = 0x8B;//外部中斷1中斷標志
sbit IT1 = 0x8A;//設置外部中斷1的觸發方式,0低電平觸發,1負跳變觸發
sbit IE0 = 0x89;//外部中斷0中斷標志
sbit IT0 = 0x88;//設置外部中斷0的觸發方式,0低電平觸發,1負跳變觸發
/* IE */
sbit EA = 0xAF;//總中斷允許位
sbit ES = 0xAC;//串行通訊口中斷允許位
sbit ET1 = 0xAB;//定時器1中斷允許位
sbit EX1 = 0xAA;//外部中斷1允許位
sbit ET0 = 0xA9;//定時器0中斷允許位
sbit EX0 = 0xA8;//外部中斷0允許位
/* IP */
sbit PS = 0xBC;//串行通訊口中斷優先級設置
sbit PT1 = 0xBB;//定時器1中斷優先級設置
sbit PX1 = 0xBA;//外部中斷1優先級設置
sbit PT0 = 0xB9;//定時器0中斷優先級設置
sbit PX0 = 0xB8;//外部中斷0優先級設置
/* P3 */
sbit RD = 0xB7;//外部數據存貯器讀脈沖
sbit WR = 0xB6;//外部數據存貯器寫脈沖
sbit T1 = 0xB5;//定時器1外部輸入口
sbit T0 = 0xB4;//定時器0外部輸入口
sbit INT1 = 0xB3;//外部中斷1輸入口
sbit INT0 = 0xB2;//外部中斷0輸入口
sbit TXD = 0xB1;//串行輸出口
sbit RXD = 0xB0;//串行輸入口
/* SCON *///寄存器用于設置串行口的工作方式和查詢接收、發送中斷產生標志
sbit SM0 = 0x9F;//串口通訊的工作方式
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;//多機通訊控制位
sbit REN = 0x9C;//串行通訊接收允許位
sbit TB8 = 0x9B;//用于存放發送的第9位數據
sbit RB8 = 0x9A;//用于存放接收到的第9位數據
sbit TI = 0x99;//發送數據中斷標志位,發送結束,硬件置1,發中斷請求,要軟件復位,一般是在中斷服務程序中執行復位操作
sbit RI = 0x98;//接收數據中斷標志位,接收結束,硬件置1,發中斷請求,要軟件復位,一般是在中斷服務程序中執行復位操作
#endif
這個頭文件定義了I/O口為P0、P1、P2、P3,都是大寫的P,你搞個小寫的,當然找不到了。
作者:
slcands
時間:
2018-1-24 16:20
一般預定義的都是大寫的,C語言是大小寫敏感的。!
作者:
2924958047
時間:
2018-1-25 10:09
大小寫出了問題
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1