當前位置:首頁 » 編程語言 » c語言p控制
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言p控制

發布時間: 2023-05-25 21:30:20

㈠ 求秒錶c語言 結構:P0口控制數碼,P2.7控制十位,P2.5控制個位,P2.3按下秒錶靜止,P2

你好!這是模擬還是做實物,程序可以嘗試完成

㈡ 求單片機C語言編程p1.0,p1.1分別控制led1,led2. p3.2控制按鍵開關,求詳細C程序

#include<reg51.h>
#define uchar unsigned char
uchar sec,min,num;
sbit led1=P1^0;
sbit led2=P1^1;
sbit key=P3^2;
bit flag;
void delay(uchar x)
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=20)
{
num=0;
sec++;
if(sec>59)
{
sec=0;
min++;
switch(min)
{
case 0:led1=0;break;
case 1:if(flag){led1=0;min=0;flag=0;}
break;
case 4:led1=1;led2=0;break;
case 8:led2=1;break;
default:break;
}
if(min>=20)min=0;
}
}
}
void ext0() interrupt 0
{
delay(30);
if(key==0)
{
while(!key);
flag=1;
sec=0;
min=0;
num=0;
led1=1;
led2=1;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
EX0=1;
IT0=1;
TR0=1;
led1=0;
led2=1;
flag=0;
while(1);
}

㈢ C語言編程求解!~

/**
* 描述:解決網路知道中一位網友提出的問題
* 作者:QQwen
*/
#include <stdio.h>
#define M 3 //定義數組的一維
#define N 5 //定義數組的二維
//定義一個測試用數組,用來調試程序
int testArray[3][5] =
{
{ 11, 12, 13, 14, 15 },
{ 21, 22, 23, 24, 25 },
{ 31, 32, 33, 34, 35 }, };
/**
* 數組轉換函數
* @param int (*a)[N] 需要轉換的二維數組
* @param int k 從第k列左移
*/
//在這里第一個參數是很有說法的,這個直接影響到函數中的寫法,如果函數中出現「a[i][j]」塌培這種操作的時候
//一定要這樣定義參數,碼昌否則編譯器會提示你對a的下標操作是錯誤的,也就是說只有這樣定義第一個個參數在函數
//體中才能以下標的形式操作數組中的元素
void fun(int (*a)[N], int k)
{
//int i, j, p, temp; //ij為循環變數,temp用來存儲每行第一個元素,p這個變數意義不大用來配合k使用
int i, j, temp;
for (; k>0; k--)
//for (p = 1; p <= k; p++) //這里的p定義的有些多餘,改團模唯為上面的方式更好
for (i = 0; i < M; i++)
{//行循環
temp = a[i][0]; //將每行的第一個元素先存儲在臨時的變數中,
//這樣就空出了自己的位置,即使後面的變數覆蓋了數據也不會丟失
//下面的操作是將數組中後一個元素搬運到前面一個位置,比如testArray[0][0] = 11,在執行
//完下面操作一次之後testArray[0][0] = 12。
for (j = 0; j < N - 1; j++)
a[i][j] = a[i][j + 1];
//再一行的元素都向前移動一位之後將先前保存的第0個元素賦值給本行最後的
a[i][N - 1] = temp;
}
}
/**
* 列印數組中的元素
*/
void printArray()
{
int i, j;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d \t", testArray[i][j]);
}
printf("\n"); //換行
}
}
int main()
{
int column = 0; //從哪列左移
printf("請輸入要從第幾列左移(1--5):\n");
scanf("%d",&column);
printf("二維數組轉換之前為:\n");
printArray();
fun(testArray, column);
printf("二維數組轉換之後為:\n");
printArray();
return 0;
}

程序輸出為:

請輸入要從第幾列左移(1--5):
2
二維數組轉換之前為:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
二維數組轉換之後為:
13 14 15 11 12
23 24 25 21 22
33 34 35 31 32

㈣ 單片機C語言 兩個按鍵控制8位花樣流水燈,P1.0接按鍵k1,P1.1接按鍵k2,P0口的8位接8個發光二極體

匯編程序如下:
; 花樣流水燈(8個發光二極體以各種形式循環點亮)
; 功能:流水燈(8個發光二極體循環以1S間隔以各種形式循環點亮)
ORG H ;偽指令,指定程序從H開始存放
LJMP MAIN ;跳轉指令,程序跳轉至MAIN處執行
ORG H ;偽指令,指定程序從H開始存放
MAIN: MO SP, #60H ;給堆棧指針賦初值
MO P1,#0FFH ;給P1口賦值
MO DPTR,#TABLE;查表
LIGHT: MO R4,#42 ;設置循環次數
LOOP: MO A,#42 ;給A賦初值
SUBB A,R4 ;將A的值與R4的值相減,結果存在A中
MOC A,@A+DPTR ;將A+DPTR的值所坦好大對應的TABLE中的值賦給A
MO P1,A ;將A的值賦給P1口
LCALL DEL1S ;調用1S延時子程序
DJNZ R4,LOOP ;判斷R4是否為0,不為0跳轉,為0順序執行
LJMP LIGHT ;跳轉指令,跳轉至LIGHT處繼續執行
;1S延時子程序(11.MHz晶振,誤差0微秒)
DEL1S: MO R5, #H
DL1S0: MO R6, #0A4H
DL1S1: MO R7, #H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;定義表格數據
DB 0FFH ;全滅
DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐個點亮
DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H H H ;依次逐個疊加
DB H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐個遞減
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;兩邊靠攏後分開
DB 07EH 03CH H H H H 03CH 07EH ;兩邊疊加後遞減
DB H ;全亮
END ;程序結束指令
C語言程序如下:
/* 該實驗是花樣流水燈(8個發光二極體以各種襪敏方式循讓豎環點亮),功能是花樣流水燈(8個發光二極體以1S間隔以各種方式循環點亮) */
#include//包含reg.52文件
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
void delay(uint z);//聲明延時函數
uint a;//定義循環用變數
uchar code table[]={
0xff,//全滅
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐個點亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐個疊加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐個遞減
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//兩邊靠攏後分開
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//兩邊疊加後遞減
0x00,//全亮
;//¶¨ҥѭ»·Ӄʽ¾ݱ�
/*Aµď֏󣺏ȊLj«ð£¬Ȼº󒀴Ζ𸶵ぁ£¬Ȼº󒀴Ζ𸶵�
Ȼº󒀴Ζ𸶵ݼ�»º󁽱߿¿£º󷖿ª£¬Ȼº󁽱ߵ�ݼ𖎱
׮º󈫁a£ѭ»·£¡*/
void in()//inº¯ʽ
{
a=0;//¸񸳳𕛕
while(1)//whileѭ»·
{
P1=table[a];//½«a˹Ԛµ”able֐µĖµ¸³¸􁿚
delay();//1Sѓʱד³̐ɠ a ;//aµĖµ¼Ӓ»
if(a==42)//²⊔aʇ·񵈓Ƥ2
a=0;//¸񸳖µ
}
}
void delay(uint z)//1msѓʱד³̐򣬍¨¹�±䑓ʱʱ¼F{
uint x,y;
for(x=z;x

㈤ C語言中%p,%u,%lu都有什麼用處

C語言「格式控制字元」:p是pointer(指針縮寫);u是unsigned(無符號的)縮寫無正負號
1. %p會把值作為一個地址輸出。
2. %u對int型和unsigned int型都可以,表示輸入輸出格式為無符號int型。
3. %lu對unsigned long型,無符號長整數型。
%p舉例:int i=0; printf("%p",&i); 執行結果: 0xbffb2d6a 。%p是將&i這個值作為地址輸出,並以0x開頭16進制類型輸出出來。
%u舉例: int a=-1; unsigned int b ;
b=a; printf("%d\t %u\t %d\t %u",a,a,b,b); \\ \t是製表符,
執行結果:-1 4294967295 -1 4294967295

㈥ 誰能幫我用c語言寫個51單片機p0.0控制p0.7高低變化的程序

#include<reg51.h>

#defineucharunsignedchar

bittemp;

sbitLED1=P0^7;

sbitKEY=P0^0;

voiddelay(unsignedintms)

{

unsignedchari;

while(ms--)

for(i=0;i<123;i++);

}

voiddisp1()

{

LED1=1;

}

voiddisp2()

{

LED1=0;

}

voidmain()

{

KEY=0;

while(1)

{

while(KEY)

段絕局{

delay(10);

if(!KEY)

temp=!temp;

宏兄if(!temp)

disp1();

else

disp2();

握讓}

}

}

㈦ 51單片機c語言編程:編寫一段程序,P1.0控制LED,P1.1控制LED的亮和滅(P1.7口接按鍵,按下時LED亮,彈起LED滅

P1.0、P1.1,都余盯凳是控制 LED 的?則空
試試豎旅下面的程序:

#include <reg51.h>
sbit led = P1^0;
sbit key = P1^7;
void main()
{
while(1) led = key;
}

P1.1,不知道怎麼用。

㈧ c語言中%p是什麼意思

格式控制符「%p」中的p是pointer(指針)的縮寫。指針的值是語言實現(編譯程序)相關的,但幾乎所有實現中,指針的值都是一個表示地址空間中某個存儲器單元的整數。printf函數族中對於%p一般以十六進制整數方式輸出指針的值,附加前綴0x。

%p是列印地址的, %x是以十六進制形式列印, 完全不同!另外在64位下結果會不一樣, 所以列印指針老老實實用%p 。

(8)c語言p控制擴展閱讀:

%x同樣輸出16進制形式,不過%x對應的是int型,也就是說,其輸出長度與系統int型占的位元組數相等回。如32位編譯器,int型佔4位位元組,那麼%x輸出的結果最多為16個16進制字元。

而%p輸出寬度取決於系統地址匯流排位數,即16位最多輸出4位16進制字元,32位最多輸出8位16進制字元,64位最多輸出16位16進制字元。

㈨ C語言編程,怎麼計算PID控制

Step 7寫的PID控制的FC模塊。帶"_IN"與帶"_OUT"的變數,如果前綴是一樣的,要求連接同一個變數。

FUNCTION FC1 : VOID

VAR_INPUT
Run:BOOL; //True-運行,False-停止
Auto:BOOL; //True-自動,False-手動
ISW:BOOL; //True-積分有效,False-積分無效
DSW:BOOL; //True-微分有效,False-微分無效
SetMV:REAL; //手動時的開度設定值
SVSW:REAL; //當設定值低於SVSW時,開度為零
PV:REAL; //測量值
SV:REAL; //設定值
DeadBand:REAL; //死區大小
PBW:REAL; //比例帶大小
IW:REAL; //積分帶大小
DW:REAL; //微分帶大小
dErr_IN:REAL; //誤差累積
LastPV_IN:REAL; //上一控制周期的測量值
END_VAR

VAR_OUTPUT
MV:REAL; //輸出開度
dErr_OUT:REAL; //誤差累積
LastPV_OUT:REAL;//上一控制周期的測量值
END_VAR

VAR
Err:REAL; //誤差
dErr:REAL; //誤差累積
PBH:REAL; //比例帶上限
PBL:REAL; //比例帶下限
PVC:REAL; //測量值在一個控制周期內的變化率,即測量值變化速率
P:REAL; //比例項
I:REAL; //積分項
D:REAL; //微分項
END_VAR

IF Run=1 THEN
IF Auto=1 THEN
IF SV>=SVSW THEN
Err:=SV-PV;
PBH:=SV+PBW;
PBL:=SV-PBW;
IF PV<PBL THEN
MV:=1;
ELSIF PV>PBH THEN
MV:=0;
ELSE
P:=(PBH-PV)/(PBH-PBL); //計算比例項
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下為積分項的計算//////////////////////////////////////////////////////////////
IF ISW=1 THEN
dErr:=dErr_IN;
IF (PV<(SV-DeadBand)) OR (PV>(SV+DeadBand)) THEN
IF (dErr+Err)<(0-IW) THEN
dErr:=0-IW;
ELSIF (dErr+Err)>IW THEN
dErr:=IW;
ELSE
dErr:=dErr+Err;
END_IF;
END_IF;
I:=dErr/IW;
dErr_OUT:=dErr;
ELSE
I:=0;
END_IF;
/////////////////////////////////////////////以上為積分項的計算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////以下為微分項的計算//////////////////////////////////////////////////////////////
IF DSW=1 THEN
PVC:=LastPV_IN-PV;
D:=PVC/DW;
LastPV_OUT:=PV;
ELSE
D:=0;
END_IF;
/////////////////////////////////////////////以上為微分項的計算//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IF (P+I+D)>1 THEN
MV:=1;
ELSIF (P+I+D)<0 THEN
MV:=0;
ELSE
MV:=P+I+D;
END_IF;
END_IF;
ELSE
MV:=0;
END_IF;
ELSE
MV:=SetMV;
END_IF;
ELSE
MV:=0;
END_IF;

END_FUNCTION

進行整定時先進行P調節,使I和D作用無效,觀察溫度變化曲線,若變化曲線多次出現波形則應該放大比例(P)參數,若變化曲線非常平緩,則應該縮小比例(P)參數。比例(P)參數設定好後,設定積分(I)參數,積分(I)正好與P參數相反,曲線平緩則需要放大積分(I),出現多次波形則需要縮小積分(I)。比例(P)和積分(I)都設定好以後設定微分(D)參數,微分(D)參數與比例(P)參數的設定方法是一樣的。

當初寫這段程序的就是為了使用調功器來控制爐子的溫度的,已經在我單位的調功器上運行成功了,還有就是我單位的調功器沒有使用微分(D),只是用了比例(P)和積分(I)。

㈩ 單片機c語言如何控制第五隻數碼管亮顯示p

共陽極數枯世蠢碼管碼段返虛(帶小數點):{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x66,0x21,0x06,0x0e,0x0c,0x09,0x11}分別代表
0 , 1, 2, 3, 4,沒陪 5, 6, 7, 8, 9, A, B, C, D, E, F, P, H, Y
共陰極數碼管碼段(帶小數點):
{0xbf ,0x86,0xdb,0xcf, 0xeb,0xed,0xfd, 0x87, 0xff, 0xef, 0xf7,0xfc, 0x99,0xde,0xf9, 0xf1,0xf3,0xf6,0xee}分別表示
0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, P, H, Y

採用動態掃描