當前位置:首頁 » 編程語言 » 單片機c語言輸入

單片機c語言輸入

發布時間: 2022-07-01 17:16:36

❶ 單片機c語言如何實現輸入實時檢測

可以用電壓比較器,檢測輸入端電壓的變化,比較器輸出端接單片機的中斷埠,這樣既可以實時監測輸入實時電壓,作出反應,又不太佔用軟體資源。

❷ 單片機C語言編程輸入字元串問題

單片機和PC通訊,通過RS232串口是最簡單的方式。
要實現你的想法,首先在PC端有個應用程序,可以通過串口向單片機發出字元,比如「串口調試助手」。然後將單片機與PC通過RS232連接。
然後,在單片機這邊,你自己去了解下單片機RS232編程,很簡單的,設定好RS232中斷,當單片機的RS232介面接收到PC端發送過來的字元時,單片機便會產生一個中斷,然後你編程響應這個中斷,回發一個字元就行了。
如果是一個個的字元,也不用擔心,單片機有RS232緩存區的,你要做的就是不斷的讀取緩存區的數據,不必去關心數據是如何發送和接受的。

❸ 在單片機C語言編程中怎麼定義輸入口P2

在單片機中,P2為單片機的輸入輸出埠,其在單片機中的地址為0xA0,可使用如下方法定義P2口。

❹ 單片機埠用C語言怎麼定義

單片機的介面是指連接到單片機系統的所有外部通道,比如RS232介面等等;

而埠指的是單片機引腳這些單片機的直接輸出輸入口。

因此通常對埠的定義就是直接定義每一個引腳。以51為例:

51單片機的埠分類方法:P0、 P1、 P2、 P3.

這分別代表一組引腳,每組有8個引腳;如 P0 是由 P0.0、P0.1、P0.2...P0.7共8個引腳組成的。

❺ c語言的程序怎麼樣輸入到單片機中

1、把C語言編譯為編程器支持的語言格式,比如常用的bin,或hex等格式。
2、如果是可在線編程的,可以用ISP直接進行燒錄。
3、如果不是可在線編程的,將單片機晶元,放入編程器,然後燒錄。
注意:編譯和燒錄時,都要選擇和單片機晶元一致的型號,否則會出錯。
如果找不到對應的型號,說明不支持該型號的單片機。

❻ 51單片機C語言簡易的密碼輸入

#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換
#define CtrlPort P1
#define KeyPort P2

unsigned char code DuanMa[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xa7,0xa1,0x86,0x8e};// 顯示段碼值0~F
unsigned char code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分別對應相應的數碼管點亮,即位碼
unsigned char TempData[8]; //存儲顯示值的全局變數
unsigned char code password[8]={1,2,3,4,5,6,7,8};
//可以更改此密碼做多組測試

void DelayUs2x(unsigned char t);//us級延時函數聲明
void DelayMs(unsigned char t); //ms級延時
void Display(unsigned char FirstBit,unsigned char Num);//數碼管顯示函數
unsigned char KeyScan(void);//鍵盤掃描
unsigned char KeyPro(void);
void Init_Timer0(void);//定時器初始化
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char num,i,j;
unsigned char temp[8];
bit Flag;
Init_Timer0();

while (1) //主循環
{

CtrlPort = 0;
num=KeyPro();
if(num!=0xff)
{
if(i==0)
{
for(j=0;j<8;j++)//清屏
TempData[j]=0;
}
if(i<8)
{
temp[i]=DuanMa[num];//把按鍵值輸入到臨時數組中
for(j=0;j<=i;j++) //通過一定順序把臨時數組中
//的值賦值到顯示緩沖區,從右往左輸入
TempData[7-i+j]=temp[j];
}
i++; //輸入數值累加
if(i==9)//正常等於8即可,由於我們需要空一個用於清屏,
//清屏時的按鍵不做輸入值
{
i=0;
Flag=1;//先把比較位置1
for(j=0;j<8;j++)//循環比較8個數值,
//如果有一個不等 則最終Flag值為0
Flag=Flag&&(temp[j]==DuanMa[password[j]]);
//比較輸入值和已有密碼
for(j=0;j<8;j++)//清屏
TempData[j]=0;
if(Flag)//如果比較全部相同,標志位置1
{
TempData[0]=~0x3f; // "o"
TempData[1]=~0x73; // "p"
TempData[2]=~0x79; // "E"
TempData[3]=~0x54; // "n"
//說明密碼正確,輸入對應操作 顯示"open"
}
else
{
TempData[0]=~0x79; // "E"
TempData[1]=~0x50; // "r"
TempData[2]=~0x50; // "r"
//否則顯示"Err"
}

}
}
}
}
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{

while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
顯示函數,用於動態掃描數碼管
輸入參數 FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數碼管開始顯示
如輸入0表示從第一個顯示。
Num表示需要顯示的位數,如需要顯示99兩位數值則該值輸入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;

DataPort=0; //清空數據,防止有交替重影

CtrlPort=WeiMa[i+FirstBit]; //取位碼

DataPort=TempData[i]; //取顯示數據,段碼

i++;
if(i==Num)
i=0;

}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256; //重新賦值 2ms
TL0=(65536-2000)%256;

Display(0,8); // 調用數碼管掃描

}

/*------------------------------------------------
按鍵掃描函數,返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void) //鍵盤掃描函數,使用行列反轉掃描法
{
unsigned char cord_h,cord_l;//行列值中間變數
KeyPort=0x0f; //行線輸出全為0
cord_h=KeyPort&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //讀入列線值
KeyPort=cord_h|0xf0; //輸出當前列線值
cord_l=KeyPort&0xf0; //讀入行線值

while((KeyPort&0xf0)!=0xf0);//等待松開並輸出

return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}
/*------------------------------------------------
按鍵值處理函數,返回掃鍵值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0xee:return 0;break;//0 按下相應的鍵顯示相對應的碼值
case 0xde:return 1;break;//1
case 0xbe:return 2;break;//2
case 0x7e:return 3;break;//3
case 0xed:return 4;break;//4
case 0xdd:return 5;break;//5
case 0xbd:return 6;break;//6
case 0x7d:return 7;break;//7
case 0xeb:return 8;break;//8
case 0xdb:return 9;break;//9
case 0xbb:return 10;break;//a
case 0x7b:return 11;break;//b
case 0xe7:return 12;break;//c
case 0xd7:return 13;break;//d
case 0xb7:return 14;break;//e
case 0x77:return 15;break;//f
default:return 0xff;break;
}
}

❼ 如何寫一個單片機輸入上升沿和下降沿的脈沖輸出信號的c語言程序

如果是循環中查詢的話我一般這樣做, 定義一個變數比如keyLastStatus來記錄上一次掃描周期的狀態
sbit key=P2.0; char keyLastStatus=0;
keyLastStatus=key; //初始化
while (1)
{
if(key==0 && keyLastStatus!=key) Todo(); //上升沿
if(key==1 && keyLastStatus!=key) Todo(); //下降沿
keyLastStatus=key; //記錄上一次的狀態
}

❽ 在單片機C語言編程中怎麼定義輸入口P2

你可能是一個初學者吧?這個P2口是不需要定義的,再頭文件中肯定已經定義了。比如MCS51單片機中
#include

在REG51.H中,已經包含了P2口的定義(你可以打開這個文件看看)。在使用的時候你直接使用就可以了。比如:
if(P2
==
0x00)
{
……
}

❾ 單片機怎麼用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
}

熱點內容
javaip埠 發布:2025-02-04 09:27:09 瀏覽:853
國產存儲科技進步二等獎 發布:2025-02-04 09:13:00 瀏覽:693
編程課v 發布:2025-02-04 08:45:00 瀏覽:106
模擬器能有手機腳本么 發布:2025-02-04 08:39:50 瀏覽:757
android顯示html圖片 發布:2025-02-04 08:35:31 瀏覽:791
如何查學信網賬號及密碼 發布:2025-02-04 08:33:55 瀏覽:502
linux32位jdk 發布:2025-02-04 08:33:55 瀏覽:247
康佳伺服器連接失敗是怎麼回事 發布:2025-02-04 08:18:51 瀏覽:916
編譯編譯有什麼 發布:2025-02-04 08:05:52 瀏覽:735
讓外網訪問內網伺服器 發布:2025-02-04 08:02:20 瀏覽:783