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

c語言30hz計數器

發布時間: 2022-10-17 16:12:16

❶ 單片機c語言關於定時計數器程序運行時序問題

這個和你設置的定時器的工作模式有關系,你要在定時時間到後,依然想要TH0=0xfc; TL0=0x18。這兩個寄存器值存在的話,你就要設置定時器的工作模式為:自動重裝初值

❷ 單片機用c語言編一個程序,要求用內部定時/計數器對30個脈沖進行計數,並同時對這三十個脈沖進行計時。

看了一下你的要求,單片機里有個GATE位的設置如果你懂得用,編這個程序就不難了。下面是我個人按照你要求剛編的程序:
/***********************
功能:內部定時/計數器記錄脈沖個數和這些脈沖通過後所用的時間。
硬體:單片機用AT89c51,12M晶振。
原理:當門控位GATE為「1」時,TR0/1=1,INT0/1才能啟動定時器。
利用這個特性可以測量外部輸入脈沖的寬度。
分析:設外部脈沖由(P3.2)輸入,T0工作於定時方式1(16位計數),
GATE設為1.測試時,應在INT0低電平時,設置TR0為1(避免檢測
到正在進行的脈沖);當INT0為高電平時,就啟動計數,INT0再
次變低時,停止計數。此計數值與機器周期的乘積即為被測正脈
沖的寬度。因晶振為12MHz,機器周期為1us.
************************/
#include <reg51.h>
//sbit INT0=P3^2;//INT0在頭文件里已定義為P3^2口
#define uint unsigned int
uint pulseWidth[30],num;
void init()
{
num=0;
TMOD=0x09;//選擇定時器並設T0為方式1
TH0=0x00; //設計數初會為最大值
TL0=0x00;
}
main()
{
init();
while(1)
{
if(num<30) //記錄30個脈沖
{
while(INT0);//等待INT0變低
TR0=1; //應在INT0低電平時,設置TR0為1
while(!INT0);//等待INT0變高,啟動定時器開始計數
while(INT0); //等待INT0變低,停止定時器開始計數
TR0=0;
pulseWidth[num]=(uint)TL0;
pulseWidth[num]|=(uint)(TH0<<8);
//因機器周期為1us,故pulseWidth數組里存的數目加上單位us,
//即為所求的脈沖寬度
num++;
}
}
}

❸ 51C語言的計數器怎麼設置的,最好有解釋,

void dis_cnter(void) 顯示計數器值子程序開始
{uchar i; 定義字元型局部變數i
P3_7=1;P3_6=1; 消隱有效,允許顯示
for(i=0;i8;i++) 循環8次
根據8個單元的計數值查表發送顯示
P3_7=0; 關閉消隱,正常顯示
} 顯示計數器值子程序結束

void cnter(void) 計數轉換子程序開始
{uchar i; 定義字元型局部變數i
for(i=0;i7;i++) 循環8次
}若計數器某位值大於9,則該位回0,
而高位被進位加1
------------------------------------
if(cnt[7]9) 若計數器最高位值大於9,則計數器全清0
} 計數轉換子程序結束

void pt_cnt(void) 輸出控制子程序開始
{
if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&
(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&
(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&
(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7])) 若計數值等於預置值
out_flag=1; 輸出標志置1
else out_flag=0; 否則輸出標志置0
=================================================
if(out_flag)drv=0; 若輸出標志為1,輸出端(P3.4)置0,驅動光耦U2
else drv=1; 否則輸出端(P3.4)置1
} 輸出控制子程序結束

void main(void) 主程序開始
{ IE=0x84; 開放CPU中斷,開放外中斷1的中斷
IT1=1; 置外中斷1為邊沿觸發
while(1) 無限循環
{P3_6=0;P3_7=1; 禁止發送給顯示器,消隱有效
SBUF=0x00;while(!TI);TI=0; 向IC2發送0x00,使IC2輸出為全0
if((P3&0x24)!=0x24)keydown_flag=1; 檢測P3.2、P3.5是否為高電平。
若不為高電平,說明有鍵按下,鍵被按下標志置1
else keydown_flag=0; 否則,鍵被按下標志置0
-------------------------------------------------------------------------------
SBUF=0xfe;while(!TI);TI=0; 向IC2發送0xfe
if(!P3_2)set_flag=!set_flag; 若P3.2為0,說明S9鍵按下,標志set_flag取反
==================================================
if(!set_flag)
若標志set_flag為0,調用計數、顯示計數、輸出控制的子程序
else
否則標志set_flag為1,調用掃描S1~S8鍵、顯示預置值的子程序
=====================================================
if(keydown_flag)delay(300); 因有鍵按下,調用延時300mS子程序,
以免調整鍵值的速度過快
}
} 主程序結束

void extern_int1(void) interrupt 2 using 1 外中斷1服務子程序
{
cnt[0]++; 計數器的最低位加1
}

❹ 脈搏計數器的程序(用C語言編寫程序)

#include <reg51.h>
unsigned char i,j,t,m,DelayTime,DispBuf[3];
unsigned int n,mb;
unsigned char code
BitTab[3]={0xf7,0xef,0xdf};//位驅動碼
unsigned char code
DispTab[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//字形碼
sbit P3_0=P3^0;
void delay(DelayTime);
main() //主程序
{
TMOD=0x01; //定時器T0工作於方式1
TH0=0xec;
TL0=0x78; //T0定時時間為5ms
IE=0X83; //開中斷
IT0=1; //外部中斷0為邊沿觸發方式
TR0=1; //開定時器T0
for(;;) //脈搏指示燈控制
{
if(P3_0==0)
{
delay(200);
P3_0=1;
}
}
}
external0() interrupt 0//外部中斷服務程序
{
P3_0=0; //點亮指示燈
if(n==0)
mb=0;
else
mb=12000/n; //計算每分鍾脈搏數
DispBuf[2]=mb%10;//取個位數
mb=mb/10;
DispBuf[1]=mb%10;//取十位數
DispBuf[0]=mb/10;//取百位數
n=0;
}
Timer0() interrupt 1//定時中斷服務程序
{
TH0=0xec;
TL0=0x78;
t=BitTab[j];//取位值
P3=P3|0x38;//P3.3-P3.5送1
P3=P3&t; //P3.3-P3.5輸出取出的位值
t=DispBuf[j];//取出待顯示的數
t=DispTab[t];//取字形碼
P1=t; //字型碼由P3輸出顯示
j++; //j作為數碼管的計數器,取值0-2,顯示程序通過它確認顯示哪個數碼管
if(j==3)
j=0;
n++;
if(n==2000)//10秒鍾測不到心率,n復位
n=0;
}
void delay(DelayTime)//延時子程序
{
for(;DelayTime>0;DelayTime--)
{
for(i=0;i<250;i++)
;
}
}

❺ 單片機計數器編程如何計數脈沖,用C語言

每50ms來了多少脈沖,那定時器就不能50ms中斷一次,盡量快的中斷會比較好,2個變數計數,一個計算50ms,一個累加脈沖

❻ c語言計數器

#include <stdlib.h>
#include <math.h>
#include <graphics.h>
#include <stdio.h>
#include <process.h>
#define EXCAPE 27
#define ENTER 13
main(){
int press,i,x,y,x1,y1,ch_z=0;
int dian=0;
char ch='0'; /*input + - * / */
char emp[80],sum[80],*e,*s;
double yuan=0.000000000000;
void init(void);
void clear_z(char *u);
double strtoflt(char *p);
int getkey();
int gd=DETECT, gm;
initgraph(&gd, &gm, "");
e=emp;
s=sum;
init();
x = (getmaxx() / 2) - 120;
y = (getmaxy() / 2) - 150;
x1 = (getmaxx() / 2) + 120;
y1 = (getmaxy() / 2) + 150;
while(1){
press = getkey();
switch(press){
case EXCAPE:
exit(0);
case 47:
bar (x + 10, y + 80 + 10, x + 60 - 10, y + 80 + 60 - 10);
delay(8000);
init();
if (ch!='0'){
switch(ch){
case '/':
if (strtoflt(emp)==0.0){
ch='0';
ch_z=0;
dian=0;
emp[0]='\0';
sum[0]='\0';
e=emp;
s=sum;
outtextxy(x+30,y+40,"error!!!!!");
break;
}
yuan = strtoflt(sum) / strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
break;
case '*':
yuan = strtoflt(sum) * strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
break;
case '+':
yuan = strtoflt(sum) + strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
break;
case '-':
if (strtoflt(sum)>=strtoflt(emp)){
yuan = strtoflt(sum) - strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=strtoflt(emp)-strtoflt(sum);
sprintf(sum,"-%0.10f",yuan);
}
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
}
}
else{
if (ch_z==0){
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);

}
else{
outtextxy(x+30,y+40,sum);

}
}
ch='/';
ch_z=0;
emp[0]='\0';
e=emp;
dian=0;
break;
case 42:
bar (x + 60 + 10, y + 80 + 10, x + 60 * 2 - 10, y + 80 + 60 - 10);
delay(8000);
init();
if (ch!='0'){
switch(ch){
case '/':
yuan = strtoflt(sum) / strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '*':
yuan = strtoflt(sum) * strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '+':
yuan = strtoflt(sum) + strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '-':
if (strtoflt(sum)>=strtoflt(emp)){
yuan = strtoflt(sum) - strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=strtoflt(emp)-strtoflt(sum);
sprintf(sum,"-%0.10f",yuan);
}
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if (ch_z==0){
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
outtextxy(x+30,y+40,sum);
}
ch='*';
ch_z=0;
dian=0;
break;
case 45:
bar (x + 60 * 2 + 10, y + 80 + 10, x + 60 * 3 - 10, y + 80 + 60 - 10);
delay(8000);
init();
if (ch!='0'){
switch(ch){
case '/':
yuan = strtoflt(sum) / strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '*':
yuan = strtoflt(sum) * strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '+':
yuan = strtoflt(sum) + strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '-':
if (strtoflt(sum)>=strtoflt(emp)){
yuan = strtoflt(sum) - strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=strtoflt(emp)-strtoflt(sum);
sprintf(sum,"-%0.10f",yuan);
}
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if (ch_z==0){
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
outtextxy(x+30,y+40,sum);
}
ch='-';
ch_z=0;
dian=0;
break;
case 43:
bar (x + 60 * 3 + 10, y + 80 + 10, x + 60 * 4 - 10, y + 80 + 60 - 10);
delay(8000);
init();
if (ch!='0'){
switch(ch){
case '/':
yuan = strtoflt(sum) / strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '*':
yuan = strtoflt(sum) * strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '+':
yuan = strtoflt(sum) + strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '-':
if (strtoflt(sum)>=strtoflt(emp)){
yuan = strtoflt(sum) - strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=strtoflt(emp)-strtoflt(sum);
sprintf(sum,"-%0.10f",yuan);
}
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if (ch_z==0){
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
outtextxy(x+30,y+40,sum);
}
ch='+';
ch_z=0;
dian=0;
break;
case 49:
bar (x + 10, y + 80 + 53 + 10, x + 60 - 10, y + 80 + 53 * 2 - 4);
delay(8000);
init();
for (i=0;i<=79;i++){
if (emp[i]=='\0')
break;
}
if (ch_z==0){
*e='1';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 50:
bar (x + 60 + 10, y + 80 + 53 + 10, x + 60 * 2 - 10, y + 80 + 53 * 2 - 4);
delay(8000);
init();
for (i=0;i<=79;i++){
if (emp[i]=='\0')
break;
}
if (ch_z==0){
*e='2';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 51:
bar (x + 60 * 2 + 10, y + 80 + 53 + 10, x + 60 * 3 - 10, y + 80 + 53 * 2 - 4);
delay(8000);
init();
for (i=0;i<=79;i++){
if (emp[i]=='\0')
break;
}
if (ch_z==0){
*e='3';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case ENTER:
bar (x + 60 * 3 + 10, y + 80 + 53 + 10, x + 60 * 4 - 10, y + 80 + 53 * 2 - 4);
delay(8000);
init();
if (ch!='0'){
switch(ch){
case '/':
yuan = strtoflt(sum) / strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '*':
yuan = strtoflt(sum) * strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '+':
yuan = strtoflt(sum) + strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case '-':
if (strtoflt(sum)>=strtoflt(emp)){
yuan = strtoflt(sum) - strtoflt(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=strtoflt(emp)-strtoflt(sum);
sprintf(sum,"-%0.10f",yuan);
}
clear_z(sum);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if (ch_z==0){
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else{
outtextxy(x+30,y+40,sum);
}
}
ch='0';
ch_z=1;
dian=0;
break;
case 52:
bar (x + 10, y + 80 + 53 * 2 + 10, x + 60 - 10, y + 80 + 53 * 3 - 4);
delay(8000);
init();
if (ch_z==0){
*e='4';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 53:
bar (x + 60 + 10, y + 80 + 53 * 2 + 10, x + 60 * 2 - 10, y + 80 + 53 * 3 - 4);
delay(8000);
init();
if (ch_z==0){
*e='5';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 54:
bar (x + 60 * 2 +10, y + 80 + 53 * 2 + 10, x + 60 * 3 - 10, y + 80 + 53 * 3 - 4);
delay(8000);
init();
if (ch_z==0){
*e='6';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 46:
bar (x + 60 * 3 + 10, y + 80 + 53 * 2 + 10, x + 60 * 4 - 10, y + 80 + 53 * 3 - 4);
delay(8000);
init();
if (dian==0){
if (ch_z==0){
*e='.';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
}
else{
if (ch_z==0)
outtextxy(x+30,y+40,emp);
else
outtextxy(x+30,y+40,sum);
}
dian=1;
break;
case 55:
bar (x + 10, y + 80 + 53 * 3 + 10, x + 60 - 10, y + 80 + 53 * 4 - 4);
delay(8000);
init();
if (ch_z==0){
*e='7';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 56:
bar (x + 60 + 10, y + 80 + 53 * 3 + 10, x + 60 * 2 -10, y + 80 + 53 * 4 - 4);
delay(8000);
init();
if (ch_z==0){
*e='8';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 57:
bar (x + 60 * 2 + 10, y + 80 + 53 * 3 + 10, x + 60 * 3 - 10, y + 80 + 53 * 4 - 4);
delay(8000);
init();
if (ch_z==0){
*e='9';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 48:
bar (x + 60 * 3 + 10, y + 80 + 53 * 3 + 10, x + 60 * 4 - 10, y + 80 + 53 * 4 - 4);
delay(8000);
init();
if (ch_z==0){
*e='0';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
else{
outtextxy(x+30,y+40,sum);
}
break;
case 32:
emp[0]='\0';
sum[0]='\0';
e=emp;
s=sum;
ch='0';
ch_z=0;
dian=0;
init();
break;
case 8:
delay(8000);
for(i=0;i<=79;i++){
if (emp[i]=='\0')
break;
}
if (i==0)
break;
if (i!=79&&i!=0){
i--;
emp[i]='\0';
e=&emp[i];
}
init();
outtextxy(x+30,y+40,emp);
break;
}
}
}
/*---------------------------------------------------------------------*/
void init(void){
int x, y, x1, y1, i, j;
char emp;
x = (getmaxx() / 2) - 120;
y = (getmaxy() / 2) - 150;
x1 = (getmaxx() / 2) + 120;
y1 = (getmaxy() / 2) + 150;
cleardevice();
setbkcolor(3);
setfillstyle(1, 15);
setcolor(15);
settextstyle(1,0,1);
rectangle (x, y, x1, y1);
rectangle (x - 7, y - 7, x1 + 7, y1 + 7);
rectangle (x + 10, y + 10, x1 - 10, y + 80 - 10);
line (x, y + 80, x1, y + 80);
y = y + 80;
for (j = 1; j <= 4; j++){
x = (getmaxx() / 2) - 120;
for (i = 1; i <= 4; i++){
/* bar (x + 10, y + 10, x + 60 - 10, y + 60 - 10);*/
rectangle(x + 10, y + 10, x + 60 - 10, y + 60 - 10);
if (j == 1){
if (i == 1)
outtextxy(x + 20, y + 20, "/");
if (i == 2)
outtextxy(x + 25, y + 20, "*");
if (i == 3)
outtextxy(x + 27, y + 20, "-");
if (i == 4)
outtextxy(x + 25, y + 20, "+");
}
if (j == 2){
if (i == 1)
outtextxy(x + 25, y + 20, "1");
if (i == 2)
outtextxy(x + 25, y + 20, "2");
if (i == 3)
outtextxy(x + 25, y + 20, "3");
if (i == 4)
outtextxy(x + 25, y + 20, "=");
}
if (j == 3){
if (i == 1)
outtextxy(x + 25, y + 20, "4");
if (i == 2)
outtextxy(x + 25, y + 20, "5");
if (i == 3)
outtextxy(x + 25, y + 20, "6");
if (i == 4)
outtextxy(x + 25, y + 20, ".");
}
if (j == 4){
if (i == 1)
outtextxy(x + 25, y + 20, "7");
if (i == 2)
outtextxy(x + 25, y + 20, "8");
if (i == 3)
outtextxy(x + 25, y + 20, "9");
if (i == 4)
outtextxy(x + 25, y + 20, "0");
}
x = x + 60;
}
y = y + 53;
}
}
/*---------------------------------------------------------------------*/
int getkey(){
char lowbyte;
int press;
while(bioskey(1)==0);
press = bioskey(0);
press = press&0xff? press&0xff: press>>8;

return(press);

}
double strtoflt(char *p)
{
double rtl=0.000000000000;
double pnt=0.000000000000;
double t = 10;
int ispoint = 0;
while (*p!='\0'||*p!='.'){
if(*p<'0'||*p>'9')
break;
rtl*=10;
rtl+=*p-'0';
p++;
}
if (*p=='.'){
ispoint=1;
p++;
}
while(ispoint&&*p!='\0'){
pnt+=(double)(*p-'0')/t;
t*=10;
p++;
}
rtl+=pnt;
return (rtl);
}
/*-----------------------------------------------------------------------*/
void clear_z(char u[]){
int i;
for(i=strlen(u)-1;i>=0;i--){
if (u[i]!='0')
break;
}
if (u[i]=='.'){
u[i]='\0';
}
else{
i++;
u[i]='\0';
}
}

❼ 用c語言做一個簡單的計算器。要求能做四則運算就夠了,越簡單越好。剛學了半年的C語言

#include <stdio.h>
#include <malloc.h>
#include<string.h>
struct int_char
{
short biao;/*標志是否運算數和運算符,0運算數1運算符*/
long su;/*存儲運算數*/
char yunsuanhu;/*存儲運算符*/
struct int_char *next;
};
int main(void)
{
int fujianche(char *pstring);
struct int_char *jieshuanshi(char *string);
void yunsuan(struct int_char *suansi);
char sr[100]={0};
struct int_char *p;
int jcsr,off=1;
printf("***The positive integer four mixed operation***\n");
do
{
printf("Please enter the formula:");
gets(sr);
jcsr=fujianche(sr);/*檢測輸入是否合法*/
if(jcsr==0)break;
if(jcsr==2)
{
printf("除數不能為0\n");
continue;
}
if(jcsr==1)
{
printf("非法的算式\n");
continue;
}
}
while(1);
p=jieshuanshi(sr);/*將字元串轉換成鏈表*/
if(p==0)
{
printf("未輸入算式");/*如果鏈表為空就表示在沒有輸入任何字元的情況下按下了回車*/
return(0);
}
yunsuan(p); /*運算並輸出解題步驟*/
return(0);
}
int fujianche(char *pstring)/*字元串輸入合法性檢測函數*/
{
char suozuanfan(char fu); /*用於確定當前字元是否數字*/
int i,kuohao1=0,kuohao2=0;/*kuohao1,huohao2,用於檢測括弧的對稱性*/
for(i=0;pstring[i]!='\0';i++)
{
/*算式的開頭只能出現數字,'(' 結尾只能出現數字,')'*/
if(i==0&&pstring[i]!=suozuanfan(pstring[i])&&pstring[i]!='(')
{return(1);break;}
if(pstring[i+1]=='\0'&&pstring[i]!=suozuanfan(pstring[i])&&pstring[i]!=')')
if(i==0&&(pstring[i+1]==')'||pstring[i+2]==')'||pstring[i+3]==')'))
{return(1);break;}
if(pstring[i+1]=='\0'&&(pstring[i-1]=='('||pstring[i-2]=='('||pstring[i-3]=='('))
{return(1);break;}
/*檢測運算符出現位置的合法性*/
if(i!=0&&pstring[i+1]!='\0')/*判斷字元是否在字元串的第一位和倒數第二位!*/
{
if(pstring[i]=='+'||pstring[i]=='-'||pstring[i]=='*'||pstring[i]=='/')
{
if(pstring[i-1]!=')'&&pstring[i-1]!=suozuanfan(pstring[i-1]))
{return(1);break;}
if(pstring[i+1]!='('&&pstring[i+1]!=suozuanfan(pstring[i+1]))
{return(1);break;}
}
if(pstring[i]=='(')
{
if(pstring[i-1]!='('&&pstring[i-1]!='+'&&pstring[i-1]!='-'&&pstring[i-1]!='*'&&pstring[i-1]!='/')
{return(1);break;}
if(pstring[i+1]!='('&&pstring[i+1]!=suozuanfan(pstring[i+1]))

{return(1);break;}
}
if(pstring[i]==')'&&pstring[i+1]!='\0')
{
if(pstring[i-1]!=')'&&pstring[i-1]!=suozuanfan(pstring[i-1]))
{return(1);break;}
if(pstring[i+1]!=')'&&pstring[i+1]!='+'&&pstring[i+1]!='-'&&pstring[i+1]!='*'&&pstring[i+1]!='/')
{return(1);break;}
}
}

/*算式中不應出現除數字,加減乘除,()以外的其他字元*/
switch(pstring[i])
{
case '1' :break;
case '2' :break;
case '3' :break;
case '4' :break;
case '5' :break;
case '6' :break;
case '7' :break;
case '8' :break;
case '9' :break;
case '0' :break;
case '+' :break;
case '-' :break;
case '*' :break;
case '/' :{if(pstring[i+1]=='0')return(2);break;}
case '(' :kuohao1++;break;/*檢測括弧的對稱性假設:如果'('和')'數量相同則視為括弧對稱這里對'('和')'進行統計在循環結束時對其對比.......*/
case ')' :kuohao2++;break;
default :return(-1);
}
}
if(kuohao1!=kuohao2)/*對比括弧是否對稱*/
return(1);
return(0);
}
char suozuanfan(char fu)/*檢查fu是否數字*/
{
switch(fu)
{
case'1':{return('1');break;}
case'2':{return('2');break;}
case'3':{return('3');break;}
case'4':{return('4');break;}

case'5':{return('5');break;}
case'6':{return('6');break;}
case'7':{return('7');break;}
case'8':{return('8');break;}
case'9':{return('9');break;}
case'0':{return('0');break;}
default :return(-1);
}
}
struct int_char *jieshuanshi(char *string)/*這個函數將字元串轉換成一個含算式的鏈表它用到了suozuanfan,suozuanfan1,yunsuanfutiqu三個函數,和struct int_char結構體*/
{
char suozuanfan(char fu);
int suozuanfan1(char fu);
char yunsuanfutiqu(char yunsuanfu);
long yunsuansu=0;
int i,j,x,y,jisuqi,weisuqi;/*jisuqi用於轉換後的整數在yunsuansu數組中存儲的位置,weisuqi用於數字轉換位數的標志*/
int n=0;/*n 位鏈表長度,為0時表示建立第一節點,非0時表示建立的不是第一節點*/
struct int_char *head=0;
struct int_char *p1,*p2;
if(strlen(string)==0)return(0);
for(i=0,jisuqi=0;string[i]!='\0';i++,jisuqi++)/*遍歷字元串*/
{
if(string[i]==suozuanfan(string[i]))/*檢查串中的最高位數字*/
{
x=i;/*定位最高數字在串中的位置*/
for(j=i;string[j]==suozuanfan(string[j]);j++);/*檢查個位數字的位置*/
y=j-1;/*定位個位數字在串中的位置*/
i=j-1;/*將遍歷字元串的計數器定位在最後被檢查的字元的位置*/
for(weisuqi=1,yunsuansu=0;y>=x;y--,weisuqi*=10)/*數字轉換*/
yunsuansu+=suozuanfan1(string[y])*weisuqi;
if(n==0)/*建立表頭及將運算數接入鏈表*/
{
p1=p2=head=(struct int_char *)malloc(sizeof(struct int_char));
n++;
p1->biao=0;
p1->su=yunsuansu;
p1->yunsuanhu=0;
p1->next=0;
}
else/*將運算數接入鏈表*/
{
p1=(struct int_char *)malloc(sizeof(struct int_char));
n++;
p2->next=p1;
p2=p2->next;
p1->biao=0;
p1->su=yunsuansu;
p1->yunsuanhu=0;

p1->next=0;
}
}
if(string[i]==yunsuanfutiqu(string[i]))/*檢測是否運算符*/
{
if(n==0)/*建立表頭及將運算符接入鏈表*/
{
p1=p2=head=(struct int_char *)malloc(sizeof(struct int_char));
n++;
p1->biao=1;
p1->su=0;
p1->yunsuanhu=string[i];
p1->next=0;
}
else/*將運算符接入鏈表*/
{
p1=(struct int_char *)malloc(sizeof(struct int_char));
n++;
p2->next=p1;
p2=p2->next;
p1->biao=1;
p1->su=0;
p1->yunsuanhu=string[i];
p1->next=0;
}
}

}
return (head);
}

char yunsuanfutiqu(char yunsuanfu)/*檢測yunsuanfu是否運算符*/
{
switch(yunsuanfu)
{
case '(':{return('(');break;}
case ')':{return(')');break;}
case '+':{return('+');break;}
case '-':{return('-');break;}
case '*':{return('*');break;}
case '/':{return('/');break;}
default:return(0);
}
}
void yunsuan(struct int_char *suansi)/*運算函數有兩個子函數jjcc用於進行右括弧的運算但括弧沒只有一個運算符時消除括弧*/
{ /*wkjjcc用於進行無括弧的運算,jjcc,wkjjcc只進行單步運算*/
void jjcc(struct int_char *up,struct int_char *np);
void wkjjcc(struct int_char *up,struct int_char *np);
struct int_char *p1,*p2;/*p1,當前節點p2,上一個節點。*/
struct int_char *up,*nP;/*up(的位置,np)的位置*/
short off;
p1=suansi;
if(p1->next==0)/*如果連表中只有一個節點*/
{
printf("=%d\n",p1->su);/*就輸出這個接點並結束*/
return;
}
for(;p1!=0;p1=p1->next)
if(p1->biao&&p1->yunsuanhu==')')/*找到')'的位置*/
{
nP=p1;
for(p2=suansi;p2!=nP;p2=p2->next)/*找到'('的位置*/
if(p2->biao&&p2->yunsuanhu=='(')
up=p2;

jjcc(up,nP);
printf("=");
for(p2=suansi;p2!=0;p2=p2->next)/*輸出步驟*/
if(p2->biao)
printf("%c",p2->yunsuanhu);
else
printf("%d",p2->su);
printf("\n");
p1=suansi;
}

for(off=1;off;)
{
for(p1=suansi;p1->next;p1=p1->next);
up=suansi;
nP=p1;
if(up==nP)
off=0;
else
{
wkjjcc(up,nP);
printf("=");
for(p2=suansi;p2!=0;p2=p2->next)/*輸出步驟*/
if(p2->biao)
printf("%c",p2->yunsuanhu);
else
printf("%d",p2->su);
printf("\n");
}
}
}
void jjcc(struct int_char *up,struct int_char *np)
{
struct int_char *p1,*p2,*p3;/*p1被運算數的位置p2運算符的位置p3運算數的位置*/
short off=1;
int i;
for(p2=up;p2!=np;p2=p2->next)
{
if(p2->biao&&(p2->yunsuanhu=='*'||p2->yunsuanhu=='/'))
if(p2->yunsuanhu=='*')
{
p3=p2->next;
p1->su=p1->su*p3->su;
p1->next=p3->next;
free(p2);
free(p3);
off=0;
break;
}
else
{
p3=p2->next;
p1->su=p1->su/p3->su;
p1->next=p3->next;
free(p2);
free(p3);
off=0;
break;
}
p1=p2;
}
for(p2=up;off&&p2!=np;p1=p2,p2=p2->next)
{
if(p2->biao&&(p2->yunsuanhu=='+'||p2->yunsuanhu=='-'))
if(p2->yunsuanhu=='+')

{
p3=p2->next;
p1->su=p1->su+p3->su;
p1->next=p3->next;
free(p2);
free(p3);
break;
}
else
{
p3=p2->next;
p1->su=p1->su-p3->su;
p1->next=p3->next;
free(p2);
free(p3);
break;
}
}
for(i=1,p3=up;p3!=np;i++,p3=p3->next);
if(i<5)
{
p2=up->next;
p3=p2->next;
up->biao=0;
up->yunsuanhu=0;
up->su=p2->su;
up->next=p3->next;
free(p2);
free(p3);
}
}
int suozuanfan1(char fu)
{
switch(fu)
{
case'1':{return(1);break;}
case'2':{return(2);break;}
case'3':{return(3);break;}
case'4':{return(4);break;}
case'5':{return(5);break;}
case'6':{return(6);break;}
case'7':{return(7);break;}
case'8':{return(8);break;}
case'9':{return(9);break;}
case'0':{return(0);break;}
}
}
void wkjjcc(struct int_char *up,struct int_char *np)
{
struct int_char *p1,*p2,*p3;/*p1被運算數的位置p2運算符的位置p3運算數的位置*/
short off=1;
for(p2=up;p2!=np;p2=p2->next)
{
if(p2->biao&&(p2->yunsuanhu=='*'||p2->yunsuanhu=='/'))
if(p2->yunsuanhu=='*')
{
p3=p2->next;
p1->su=p1->su*p3->su;
p1->next=p3->next;
free(p2);
free(p3);
off=0;
break;
}
else
{
p3=p2->next;
p1->su=p1->su/p3->su;
p1->next=p3->next;
free(p2);
free(p3);
off=0;
break;
}
p1=p2;
}
for(p2=up;off&&p2!=np;p1=p2,p2=p2->next)
{
if(p2->biao&&(p2->yunsuanhu=='+'||p2->yunsuanhu=='-'))
if(p2->yunsuanhu=='+')
{
p3=p2->next;
p1->su=p1->su+p3->su;
p1->next=p3->next;
free(p2);
free(p3);
break;
}
else
{
p3=p2->next;
p1->su=p1->su-p3->su;
p1->next=p3->next;
free(p2);
free(p3);
break;
}
}
}

❽ 51單片機按鍵計數器C語言編程

#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,dis[4];
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=3;
switch(number)
P1=0x20<<number;
P0=distab[dis[number]];
}
voidint0isr()interrupt0
{
dat++;
dat%=1000;
dis[0]=dat%10;
dis[1]=dat%100/10;
dis[2]=dat/100;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}

❾ 關於C語言中,編寫一個結構體數據的計數器的問題

你打開方式帶a了?

追加?

代碼貼出來

你的代碼不全 我補了半天才能編譯通過

這樣

FILE *fp=fopen("d:\\ctest\\stu13","r");
FILE *fpn=fopen("d:\\ctest\\stu13_n.txt","w");

就這樣

❿ 用C語言寫兩個計數器的小程序。

很多人回家過年了,所以回答少,程序已通過
#include<stdio.h>
/*第一個程序:*/

main()
{
int i=1, m=0;
printf("請輸入一個數:\n");
while(i!=0){ //while 循環開始當i等於0時,程序中止;
scanf("%d",&i); //從鍵盤獲取數值,如果i=0,則退出並輸出m的值
//printf("\n");
if (i==1) m++; //如果i=1,則m+1;
}
printf("輸入 '1' 的次數:%d\n",m);
}

//第二個程序 在第一個基礎上稍修改即可
main()
{
int i=1, n,m=0;
printf("請輸入N:\n");
scanf("%d",&n);
printf("請輸入一個數:\n");
while(i!=0){
scanf("%d",&i); //從鍵盤獲取數值,如果i=0,則退出並輸出m的值
if (i>n) m++; //如果i>n,則m+1;
}
printf("大於N次數:%d\n",m);
}