c51单片机编程,用单片机c51c语言编09计数器程序谢谢

1,用单片机c51c语言编09计数器程序谢谢#include<reg51.h>#define uchar unsigned charuchar table[]=uchar dat=0;void ext0() interrupt 0dat++;dat%=10;P1=table[dat];}main()EX0=1;IT0=1;EA=1;P1=table[dat];while(1);}
2 , c51单片机c语言程序#include<reg51.h>void delay(unsigned int i);unsigned char dis[]=unsigned char code[]=void main(void)unsigned char i,j;while(1)for(i=0;i<8;i--)for(j=0;j<8;j--)}P0=dis[i]; P2=dis[i]; P1=dis[j]; P3=dis[j];delay(10);}}}void delay(unsigned int i)unsigned int j;for(;i!=0;i--)for(j=3000;j>0;j--);}这个可以实现P0P2,P1P3口 单个I/0口的具体意思不是很明白!用C51是多么简单的事情啊 。你的每个灯的顺序不说 。不好写 。思路这样的:sbit led1=P1^0;~~~把所有的灯都定一下 。void delay(int ms)int x,y;for(x=ms;x>0;x--)for(y=110;y>0;y--);}一个Nms的延迟,要求是12M的晶振 。void main()while(1)led1=0;delay(1000);led1=1;里面随便写了 。}}
3,C51单片机编程急呀#include<reg51.h> // 头文件#define uchar unsigned char #define uint unsigned int uchar key_zhi;uchar dat0;dat1;void delay_ms(uint ms)//延时 uint jj,kk; for(jj=0;jj<ms;jj++)for(kk=0;kk<120;kk++);}void display_led()switch(key_zhi)case 1 :dat1=0;P2=0x01<<dat0;if(dat0>8)dat0=0;}delay_ms(500);dat0++;break;case 2 :dat0=0;P2=0x80>>dat1;delay_ms(1000);dat1++;if(dat1>8)dat1=0;}break;default :P2=0xff;break; }}void Init()//中断初始化 EA=1; IT0=1; EX0=1; IT1=1; EX1=1;}void main()//主函数 Init();while(1)display_led(); }}void Init0() interrupt 0 key_zhi=1;}void Init1() interrupt 2 key_zhi=2;}【c51单片机编程,用单片机c51c语言编09计数器程序谢谢】
4,51单片机的编程51编程得看外部电路的连接情况 。没有电路图,木有办法写 。。。数码管和单片机之间的电路有很多种,你这种就用译码器,74138就行 。假设单片机p1口用作数码管输出 。滑槽电路也不清楚,假设一个电机 , 用的是P2^0,P2^1(顺时针一个口 , 逆时针一个口)检测非金属物料的电路用的是P2^34. 按键电路用的是P3口代码就不贴了,说下思路 。开机初始化,给单片机所有引脚置零,然后设置数码管显示(2位十进制数显示至少需要7个引脚 , 你这里只需要用4个引脚) 。按键处理,编程中需要注意的地方就是机械开关的抖动消除,当然,如果有硬件消抖电路就不用管了 。假设k1用的是P3^1口,那么只需要判断P3^1==1为真,就可以拉高P2^0或P2^1口电压,直接P2^0=1就ok 。检测非金属物电路:检测到一个非金属物料,此电路就给单片机P2^3发送一个脉冲信号 。单片机这边,主循环里检测P2^3口的电平 , 用一个变量oldState来保存上一个状态 。用count来保存非金属物料个数if(oldState!=P2^3)count++;oldState=P^3;}计数值满10后滑槽下降初始位:if(count==10)P2^0==0;P2^1==1;count=0;}当然,如果电路还没做的话,我推荐一个电路 , 这个电路编程更简单,效率更高 。还是假设非金属检测电路一旦检测到非金属就发出一个脉冲信号 。将非金属检测电路同一个计数器(计数器可以买现成芯片,也可以自己用触发器做)的输入端连接 。计数器同数码管通过译码器连接 。单片机P1口同计数器输出端连接 。单片机同计数器清零端连接 。单片机同滑槽连接 。单片机同键盘连接 。这个电路就只需要读计数器的值,不用控制数码管 。单片机启动时向计数器清零端发出清零信号,那么数码管就显示00单片机程序主循环判断计数器的值,若为10,那么向计数器清零端发出清零信号;控制滑槽下降 。单片机程序主循环判断键盘的值,若K1按下,控制滑槽上升 。5,单片机C51编程51是单片机的一种 。基于不同内核(CPU)的单片机,其指令系统不同 , 所以编译器不同 。C51将C编译成51汇编,而单片机C语言应该通指,不过国内常把51与单片机等同起来 。统计10秒?确定?可以帮忙进行C编程 , 初始化 COUNT EQU 31H ORG0000H AJMP MAIN ORG0003H AJMPEXT0 ORG 000BH AJMP TIM0 ORG 0030HMAIN: MOV SP,#5FH MOV TH0,#3CH MOV TL0,#0B0H SETB IT0 SETB EX0 SETB ET0 SETB TR0 SETB EAM_LOOP: CALL READ NOP MOV A,COUNT MOV 30H,A SJMP M_LOOP EXT0: INC COUNT RETI TIM0: PUSH PSW PUSH ACC MOV TH0,#3CH MOV TL0,#0B0H INC LDA MOV A,LDA CJNE A,#2,TIM_RET MOV LDA,#00H MOV COUNT,#00HTIM_RET: POP ACC POP PSW RETIEND ORG 00HLJMP MAINORG 03H ;ISP FOR EXTERN INT0LJMP EX0_ISPORG 03H ;ISP FOR EXTERN INT0LJMP EX0_ISPORG 0BHLJMP ET0_ISPMAIN:MOV SP,#0HMOV 30H,#0H ;CLEAR 30HMOV IE,#83H ;ENABLE EA,EX0,ET0 IN IE BYTEMOV TH0,#80HMOV TL0,#30H ;SET OVERFLOW TIME OF TIMER0MOV TMOD,#01H ;16BIT TIMER/CNTMOV TCON,#10H ;ENABLE TR0 IN TCON BYTETIME_CNT:;10SMOV R0,#7FHTIME_CNT0:MOV A,#7FHTIME_CNT1:JNZ $ DJNZ R0,TIME_CNT0MOV IE,#0H ;DISABLE EXT_ISP ET0_ISPJMP $EX0_ISP:INC 30HRETIET0_ISP: ;GENERATE TIME BASE FOR TIME_CNTMOV TH0,#80HMOV TL0,#30H ;SET OVERFLOW TIME OF TIMER0DEC ARETIEND用外部中断计数 , 定时器定时到10秒,计数值清零,定时器清零 。并保存数据

    推荐阅读