當前位置:首頁 » 編程語言 » 用按鍵實現次數清零功能的c語言程序怎麼寫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用按鍵實現次數清零功能的c語言程序怎麼寫

發布時間: 2022-06-24 03:13:34

㈠ 如何用c語言編程51單片機程序,滿足從0-4小時計時,有清零,開始,暫停功能

㈡ 求大佬幫寫一個C語言程序,輸入一個n,能對隨便某一位清零的程序

#include<stdio.h>
intmain()
{inta,n;
scanf("%d%d",&n,&a);
a&=~(1<<n);
printf("%d ",a);
return0;
}

㈢ 如何實現用C語言編寫一個對可用數據內存清零程序

只能用指針實現,例如,要將內存第25個單元開始到第49個內部RAM單元清零,可以這樣寫:
unsigned
char
*Ptr
=
(unsigned
char
data
*)25;
unsigned
char
i;
for(i
=
0;i<25;i++)
{
*(Ptr+i)
=
0;
}
如果是要將外部RAM第25個單元開始到第49個單元清零,可以這樣寫
unsigned
char
*Ptr
=
(unsigned
char
xata
*)25;
unsigned
char
i;
for(i
=
0;i<25;i++)
{
*(Ptr+i)
=
0;
}

㈣ 51單片機C語言程序4個獨立按鍵實現對數碼管數字顯示的加減清零等

#include<reg52.h>
//P0是數碼管。P1是LED.P2是按鍵
sbitKEY_OUT_1=P2^3;
sbitKEY_OUT_2=P2^2;
sbitKEY_OUT_3=P2^1;
sbitKEY_OUT_4=P2^0;

#defineucharunsignedchar
#defineulintunsignedlong
#defineFrequency10//定時器中斷時間=f*T
#defineTime1//一個周期1ms
#defineTubeNumber6//數碼管個數
#defineKeyLine4//矩陣按鍵行數
#defineKeyColumn4//矩陣按鍵列數
//數碼管真值表
ucharcodeLED_Number[]={0x0C,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//ucharcodeLED_Alphabet[]={0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xC7,0x8C,0xC1,0x91,0x9C};
/*0~9
A~F(b、d為小寫)HLPUyo*/
ucharLED_Buff[TubeNumber]={0xff,0xff,0xff,0xff,0xff,0xff};
/*數碼管顯示緩沖區,0xff確保初始時都不亮.
不可寫成ucharcodeLED_Buff[]。code定義變數寫入room,不可修改*/
//矩陣按鍵編號到標准盤碼的映射表
ucharcodeKeyCodeMap[4][4]={
(0x31,0x32,0x33,0x26),//數字鍵1、數字鍵2、數字鍵3、向上鍵
(0x34,0x35,0x36,0x25),//數字鍵4、數字鍵5、數字鍵6、向左鍵
(0x37,0x38,0x39,0x28),//數字鍵7、數字鍵8、數字鍵9、向下鍵
(0x30,0x1B,0x0D,0x27)};//數字鍵0、ESC鍵、回車鍵、向右鍵
ucharStaFlag[KeyLine][KeyColumn]={(1,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,1,1)};//按鍵是否穩定標志
voidStartTime0();
voidTubeDisplay(ulintsec);
ulintpow(x,y);
voidTubeScan();
voidKeyAction(ucharkeycode);
voidKeyDriver();
voidKeyScan();
voidmain()
{
P1=0x08;//使能U3,選擇數碼管。
StartTime0();
while(1)KeyDriver();
}
//定時器0啟動函數
voidStartTime0()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-Time*100)/256;
TL0=(65536-Time*100)%256;
PT0=1;
/*定時器0優先中斷控制位。
IP這個寄存器的每一位,表示對應中斷的搶占優先順序,每一位的復值都是0,當我們把某一位設置為1的時候,這一位優先順序就比其它位的優先順序高了。
比如我們設置了PT0位為1後,當單片機在主循環或其他中斷程序執行時,一旦TO發生中斷,作為更高優先順序,程序馬上執行T0.若在T0程序執行時,
其他中斷程序發生中斷,仍執行TO直到T0中斷結束後再執行其他程序。
*/
}
//中斷服務函數
voidTo_time0()interrupt1using0
{
staticucharcnt;//記錄TO中斷次數
// staticulintsec;//記錄經過秒速
//判斷是否溢出
if(TF0==1)
{
TF0=0;
TH0=(65536-Time*100)/256;
TL0=(65536-Time*100)%256;
}

if(cnt>=Frequency)
{
cnt=0;
//sec++;
// Tube_Display(sec);
TubeScan();
KeyScan();
}
}
//數碼管顯示函數
voidTubeDisplay(ulintnom)
{
ucharm=2;//小數部分位數
uchari;//傳輸索引
//秒速達到上限清零
if(nom>pow(10,TubeNumber-m))nom=0;
//分別傳輸小數部分和整數部分
for(i=0;i<m;i++)
LED_Buff[i]=LED_Number[nom/pow(10,i)%10];
for(i=0;i<(TubeNumber-m);i++)
LED_Buff[i+m]=LED_Number[nom/pow(10,i)%10];
//點亮小數點
LED_Buff[m]&=0x7f;
}
//平方運算函數
ulintpow(x,y)//x為底,為冪
{
ulintp,i=1;
//平方運算
for(i=1;i<=y;i++)
p*=x;
//輸出結果
returnp;
}
//數碼管動態函數
voidTubeScan()
{
staticuchari=0;//動態掃描索引
//關閉所有段選位,數碼管消隱
P0=0xff;
//for(i=0;i<Tube_number;i++)
P1=(P1&0xf8)|i;//位選索引賦值到P1口低3位
P0=LED_Buff[i];//緩沖區中的索引位置數據傳輸到P0口
if(++i>=TubeNumber)i=0;//索引遞增循環,遍歷整個緩沖區
}
//矩陣按鍵動作函數
voidKeyAction(ucharkeycode)
{
staticulintresult;
ulintnom=0;
//輸入數字0~9
if((keycode>=0x30)&&(keycode<=39))
{
nom=(nom*10)+(keycode-0x30);//十進制整體左移,新數進入各位
TubeDisplay(nom);
}
//輸入方向鍵
if((keycode>=0x25)&&(keycode<=28))
switch(keycode)
{
case0x26:result+=nom;nom=0;TubeDisplay(result);
case0x28:result-=nom;nom=0;TubeDisplay(result);
case0x25:result=1;result*=nom;nom=0;TubeDisplay(result);
case0x27:result=1;result/=nom;nom=0;TubeDisplay(result);
}
elseif(keycode==0x0d)TubeDisplay(result);//輸入回車鍵,輸出最終結果
elseif(keycode==0x1b)//輸入ESC鍵,清零
{
nom=result=0;
TubeDisplay(nom);
}
}
//矩陣按鍵驅動函數
voidKeyDriver()
{
ucharl,c;
staticucharbackup[KeyLine][KeyColumn]={(1,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,1,1)};//按鍵值備份,保存前一次值
for(l=0;l<KeyLine;l++)
{
for(c=0;c<KeyColumn;c++)
{
if(backup[l][c]!=StaFlag[l][c])
{//檢測按鍵動作
if(backup[l][c]==1)//按鍵按下時執行
KeyAction(KeyCodeMap[l][c]);//調用動作函數
backup[l][c]=StaFlag[l][c];//刷新前一次備份值
}
}
}
}
//矩陣按鍵掃描函數
voidKeyScan()
{
ucharl=0;//矩陣按鍵掃描輸出索引
ucharc=0;//矩陣按鍵掃描列索引
ucharkeybuff[KeyLine][KeyColumn]={(0xff,0xff,0xff,0xff),(0xff,0xff,0xff,0xff),
(0xff,0xff,0xff,0xff),(0xff,0xff,0xff,0xff)};//矩陣按鍵掃描緩沖區
//將一行的四個按鍵移入緩沖區
for(l=0;l<KeyColumn;l++)
keybuff[l][c]=((0xfe|(P2>>(4+l))&0x01));
//按鍵消抖
for(l=0;l<KeyLine;l++)
{
if((keybuff[l][c]&0x0f)==0x00)//連續4次掃描都為0,判斷4*4ms內都是按下狀態,可認為按鍵已穩定按下
StaFlag[l][c]=0;
elseif((keybuff[l][c]&0x0f)==0x0f)//連續4次掃描都為1,判斷4*4ms內都是彈起狀態,可認為按鍵已穩定彈起
StaFlag[l][c]=1;
}
for(c=0;c<KeyColumn;c++)
{
switch(c)//根據索引,釋放當前輸出腳拉低下次的根據索引
{
case0:KEY_OUT_4=1;KEY_OUT_1=0;break;
case1:KEY_OUT_1=1;KEY_OUT_2=0;break;
case2:KEY_OUT_2=1;KEY_OUT_3=0;break;
case3:KEY_OUT_3=1;KEY_OUT_4=0;break;
default:break;
}
}
}

㈤ 用定時器實現10s秒錶的計時功能,精確到小數點後一位,即能夠有0.1s顯示,有開始,暫停,清零的功能(C語

/* 名稱:10s 的秒錶
說明:首次按鍵計時開始,再次按鍵暫停,第三次按鍵清零。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit K1=P3^7;

uchar
i,Second_Counts,Key_Flag_Idx;
bit Key_State;
uchar
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延時
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}
//處理按鍵事件
void Key_Event_Handle()
{
if(Key_State==0)
{
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
{
case 1: EA=1;ET0=1;TR0=1;break;
case 2: EA=0;ET0=0;TR0=0;break;
case 0: P0=0x3f;P2=0x3f;i=0;Second_Counts=0;
}
}
}
//主程序
void main()
{
P0=0x3f; //顯示 00
P2=0x3f;
i=0;
Second_Counts=0;
Key_Flag_Idx=0; //按鍵次數(取值 0,1,2,3)
Key_State=1; //按鍵狀態
TMOD=0x01; //定時器 0 方式 1
TH0=(65536-50000)/256; //定時器 0:15ms
TL0=(65536-50000)%256;
while(1)
{
if(Key_State!=K1)
{
DelayMS(10);
Key_State=K1;
Key_Event_Handle();
}
}
}
//T0 中斷函數
void DSY_Refresh() interrupt 1
{
TH0=(65536-50000)/256; //恢復定時器 0 初值
TL0=(65536-50000)%256;
if(++i==2) //50ms*2=0.1s 轉換狀態
{
i=0;
Second_Counts++;
P0=DSY_CODE[Second_Counts/10];
P2=DSY_CODE[Second_Counts%10];
if(Second_Counts==100) Second_Counts=0; //滿 100(10s)後顯示 00
}
}
圖片上傳不了……

㈥ 求51單片機c語言編程,要求我每按一下按鈕A顯示器上的數就加1,按一下按鈕B顯示器清零。要求c語言程序!

if(A==0) //A 按下後讓連接數碼管的埠顯示1
{
P0=XXXX;
}

if(B==0) //B按下後讓數碼管不顯示
{
p0=XXXX;
}

㈦ 51單片機 獨立按鍵 計算連續按下按鍵的次數和連續按動時間的單片機C語言程序應該怎麼寫多謝!

先根據你要顯示數字的個數定義一個unsigned char型的字元數組,調用掃描鍵盤函數,掃描到哪個鍵被按下的同時將鍵值存進對應的數組元素中,再調用液晶顯示程序顯示,液晶顯示程序中顯示的位數可變,可以

㈧ 怎麼用c語言編寫一個秒錶,這個秒錶按1停止,按0清零,求大神教!!

用到time.h文件
裡面有個clock();函數,返回一個clock_t類型的數字,表示從程序運行開始,CPU的"滴答"數
而在time.h里有個常量CLOCKS_PER_SEC表示每秒鍾有多少個"滴答".
這樣,(((float)clock())/CLOCKS_PER_SEC)*1000這樣的表達式就能得到從程序運行開始到現在的經過的時間.
程序的大致思路是這樣的,程序按下1的時候記下當時的程序運行時間.
從這時起,每時刻撿取程序運行時間,然後減去先前的值,就可以得到已經計時的時間了.
只要讓用戶按下0結束計時就好了
在conio.h文件里,有個函數kbhit()是個非阻塞函數,用來檢查鍵盤緩沖里有沒有按鍵按下,若有,則返回1,若沒有,則返回0,以此來作為判斷,若返回1,則撿取按鍵,測試它是不是0或者1,若返回0,則表示用戶沒有動作,繼續原來的工作,即繼續計時或等待命令.

㈨ 利用定時器 按下一個按鍵後 如何讓一個數自動減一 用C語言寫請教 啊

C語言中哪裡來的按鈕啊,看來你沒搞清楚,C基本不設計界面的問題
如果非要用C來做,可以使用time函數,但效率會低一點。如下
#include "time.h"
#include "malloc.h"
int main(int argc, char* argv[])
{
time_t *clock=(time_t*)malloc(sizeof(time_t));
struct tm *mytime=(tm*)malloc(sizeof(tm));
int sec, curTime;
int num = 10; //需要減一的數,為0結束
while( num >=0 ){
time(clock);
mytime = localtime(clock);
sec = mytime->tm_sec;
num --;
printf("%d\n",num);
curTime = sec;
while(sec == curTime ){ // 隔1秒,減1,可以根據情況修改。效率在這里低下
//因為是單線程
time(clock);
mytime = localtime(clock);
curTime = mytime->tm_sec;
}

}
return 0;
}
程序運行是每隔1秒輸出一個數。
原理是用time取得當前的時間,然後判斷當前時間的秒有沒有變化

㈩ 51單片機,2個按鈕2個數碼管,實現外部清零與計數,一個按鈕按一下加1

另類計數器,模擬實例,可以參考一下,模擬試試。

功能,1個主機---3個從機,主機 按鍵 1#、2#、3#、分別控制 從機 1、2、3、

按鈕按一下加1, 從機 x1# 控制主機按鈕按一下加1,

主從機的 另一個 按鍵 為清零。