㈠ 大家好:51單片機c語言中判斷任意一個IO口"P0>=1"怎樣編寫
if(P0 & 0x07) //只判斷 P00 P01 P02為高
{
P0=0xff; P1=0xff;//切換模式後數據清零
}
delay_ms(1000);
P1=~P1; P0=~P0;
㈡ 51單片機檢測引腳電平變化的C語言程序
#include <reg52.h>
sbit LED0 = P0^0; sbit LED1 = P0^1; sbit LED2 = P0^2; sbit LED3 = P0^3;
sbit LED4 = P0^4; sbit LED5 = P0^5; sbit LED6 = P0^6; sbit LED7 = P0^7;
sbit LED10 = P1^0;
void main() {
LED0 = 0; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; LED5 = 0; LED6 = 0;
LED7 = 0;
LED7 = 1;//假設有變化
if(LED7) {
LED10 = 1;
LED0 = 1; LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1; LED5 = 1; LED6 = 1; }
}
㈢ c語言51 io口程序設計
//下列程序基本正確,剩下一些脈沖寬度定時,可自行完成。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit k_1 = P3^0; //第一個輸入
uchar t_10ms, k3;
//--------------------------------------
DL_x_10ms(uchar x)
{
t_10ms = 0;
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256; //定時10ms@12MHz
TR0 = 1; //啟動定時.
while(t_10ms < x); //不到x*10ms,原地等待.
TR0 = 0; //關閉定時.
}
//--------------------------------------
void main(void)
{
TMOD = 01; //T0定時方式1
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256; //定時10ms@12MHz
TR0 = 0; //暫時不啟動.
ET0 = 1;
IT0 = 1;
IT1 = 1;
EX0 = 0;
EX1 = 0;
EA = 1;
k3 = 1;
while(1) { //
//--------------------------------------
while((k_1 == 1) || (k3 == 0));//K1沒有按,或者 K3尚未執行 原地等待.
//K1按了一次,就往下執行.
while(k_1 == 0); //等待K1釋放.
k3 = 0; //以後K1按下兩次、三次...,也不會執行.
//進入第一個中斷,P0.0口輸出低電平,P0.1口輸出高電平,延時1.5S後P0.0口輸出高電平。.
P00 = 0; P01 = 1;
DL_x_10ms(150);
P00 = 1;
EX0 = 1; //開放INT0(K2)中斷
//循環到前面,等待(K1按下且K3=1)
}
}
//--------------------------------------
T0_INT() interrupt 1
{
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256; //定時10ms@12MHz
t_10ms++;
}
//--------------------------------------
X0_INT() interrupt 0 //K2輸入下降沿,將進入本函數
{
//進入第二個中斷,延時1.11S後P0.2口輸出低電平,然後.
DL_x_10ms(111);
P02 = 0; //P0.2口輸出低電平
//輸出低電平多少時間?題目沒有說。
//---------------------
//高0.15S,
P02 = 1; //P0.2口輸出高.
DL_x_10ms(15);
//---------------------
//低0.3S,
P02 = 0; //P0.2口輸出低電平.
DL_x_10ms(30);
//下面的定時,可以自行編寫
//高0.3S,
//低0.58S,
//高0.12S,
//低1.08S,
//高2.55S,
//低0.47S,
//高0.075S,高低電平很多次這樣。.
EX0 = 0;
EX1 = 1; //開放INT1(K3)中斷
}
//--------------------------------------
X1_INT() interrupt 2
{
//當進入第三個中斷,P0.1口輸出低電平。.
P01 = 0;
EX1 = 0;
k3 = 1; //=1,將在主函數中有用
}
//--------------------------------------
㈣ 單片機怎麼用c語言設置I/O口輸入或輸出
IO口的輸入輸出是通過對單片機寄存器的配置來實現的。
C51的單片機IO口本來就是雙向的不需要設置。
STM32單片機的IO口用C語言的設置方法如下:
void LED_Config(void)
{
GPIO_InitTypeDef GPIO_Structure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//PC10-LED(指示燈)
GPIO_Structure.GPIO_Pin = GPIO_Pin_10;
GPIO_Structure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_Structure); //LED
}
㈤ 單片機脈沖計數問題(C語言)
設計數值為num
num=0;
P0^0=jishu;
jishu=1;檢測低電平IO要設置高
main()
{
if(jishu==0)
{
num++;
whlie(jishu==0);為了防止P0^0一直為低電平num一直在加
}
if(num==9990)
{
P0^1=0;
num=0;繼續下一輪計數
}
}
㈥ 51單片機怎麼用c語言寫一個按鈕控制一個led的閃爍,按一下開始閃爍,再按就滅掉
bit flash;//閃爍標志位
sbit led=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
void main()
{
P01=P02=0;
flash=0;
led=0;
while(1)
{
scankey();
ledflash();
}
}
void scankey()//鍵盤掃描
{
P01=1;//行線給1
if(P02)//如果P02也是1則說明接通
{
delay(10);//去抖動10MS
if(P02)//再次確定按鍵按下
{
while(P02){flash=flash}//按住按鍵的動作
flash=~flash;//按鍵按下後執行動作
}
}
}
void ledflash()
{
if(flash)
{
led=1;//點亮
delay(100);//延時100MS
led=0;//熄滅
}
else led=0;
}
void delay(unsigned int i)
{自己根據單片機頻率寫個1MS帶形參的演示程序}
這個程序是現寫的。。應該能執行,有些細節沒有寫,自己修改下,只是個大框而已(比如函數聲明,定義埠什麼的)
㈦ C語言程序指針p[-1] 表示什麼意思呀
呵呵,程序中出現這種用法說明這個程序員比較自我。一般不見以這樣用。
要根據上下文判斷才知道,不過從字面意思來說就是去p所代表的內存地址的前一塊。
比如:
int num[10] = {0,1,2,3,4,5,6,7,8,9};
int *p = num+2;//此時p代表的是num[2]的地址,p[0]就是num[2],p[-1]就是num[1],p[-2]就是num[0];
但是p[-3]就錯了,因為你訪問了一個未知的地址,會出現嚴重錯誤的。
㈧ 單片機c語言中的外部中斷
如樓上所說,要實現可以,不過不知道用意何在
int x;
void shizhong() interrupt 1
{
x=1;
while(x==1)
{
flag=1;
}
}
void kaishi() interrupt 0
{
x=0;
// while(x==0) 你要一直停在外部中斷0,加上這句;
//{
k=0;
// }
}
㈨ 使用DEV CPP ,源文件後綴名是大寫的C時,如 p01.C 那麼system("pause")函數無法編譯
dev cpp的後面的編譯器是gcc gcc會對後綴是小寫的c做一些額外的事情 cpp也是一樣的 但大寫的可能就當成普通文件了
㈩ 計算機c語言中 指針變數p自增1 什麼意思
自增就是+1的意思,地址+1就是指向下一個元素。例如
int array[3]={1,2,3};
int*p=array;//此時p指向array[0]
p++;//這里的p自增,執行後p指向array[1]