当前位置:文档之家› 源程序代码

源程序代码

源程序代码
源程序代码

#include

#define uchar unsigned char

#define uint unsigned int

#define Fosc 16000000

#define BAUD 9600

#define ON 0

#define OFF 255

__CONFIG(0x3B32);

#define outR_high {RC3=1,RC0=0;}

#define outR_low {RC3=0,RC0=1;}

#define outG_high {RC4=1,RC1=0;}

#define outG_low {RC4=0,RC1=1;}

#define outB_high {RC5=1,RC2=0;}

#define outB_low {RC5=0,RC2=1;}

#define power_on 0x1b //定义开键值#define power_off 0x0b //定义关键值#define single_red 0x0a //定义单红色键值#define single_green 0x03 //定义单绿色键值#define single_blue 0x02 //定义单蓝色键值#define single_cheng 0x01 //定义单橙色键值#define single_qing 0x09 //定义单青色键值#define single_zi 0x08 //定义单紫色键值#define color3_sudden_change 0x1d

#define color6_sudden_change 0x0d

#define color3_gradual_change 0x0c

#define color6_gradual_change 0x1c

#define light_add 0x07

#define light_sub 0x06

#define speed_add 0x04

#define speed_sub 0x05

unsigned char key_value=color3_gradual_change;

unsigned char key_backup=0,key_flag=0;//定义全局变量

unsigned char k=0; //用于指示突变数组的角标

unsigned char j=0; //用于指示渐变数组的角标

/*************************************************************/ unsigned char R=OFF,G=OFF,B=OFF;

unsigned char duty=ON;

unsigned char time1=10;

unsigned int time2=1500;

unsigned char on_off_rcv_time=0,on_off_flag=ON;

/****************定义场景中的动作常量和数组******************/ #define R_UP 111 //定义渐变动作--红色增长

#define G_UP 112 //定义渐变动作--绿色增长

#define B_UP 113 //定义渐变动作--蓝色增长

#define C_UP 114 //定义渐变动作—橙色增长

#define Q_UP 115 //定义渐变动作—青色增长

#define Z_UP 116 //定义渐变动作—紫色增长

#define R_DOWN 117 //定义渐变动作--红色减少

#define G_DOWN 118 //定义渐变动作--绿色减少

#define B_DOWN 119 //定义渐变动作--蓝色减少

#define C_DOWN 120 //定义渐变动作—橙色减少

#define Q_DOWN 121 //定义渐变动作—青色减少

#define Z_DOWN 122 //定义渐变动作—紫色减少

#define red 133 //定义突变动作--变成红色

#define green 134 //定义突变动作--变成绿色

#define blue 135 //定义突变动作--变成蓝色

#define yellow 136 //定义突变动作--变成橙色

#define qing 137 //定义突变动作--变成青色

#define zi 138 //定义突变动作--变成紫色

/**************************************************************/

unsigned char jianbian_six_color[6]={B_UP,R_DOWN,G_UP,B_DOWN,R_UP,G_DOWN};//三色渐

变数组

unsigned char jianbian_three_color[12]={B_DOWN,R_UP,R_DOWN,G_UP,G_DOWN,C_UP,C_DOWN,

Q_UP,Q_DOWN,Z_UP,Z_DOWN,B_UP,};//六色渐变数组

unsigned char tubian_six_color[6]={red,blue,green,zi,qing,cheng}; //六色突变数组

unsigned char tubian_three_color[3]={red,green,blue //三色突变数组

/**************可变延时函数*************************/

void delay_us(unsigned int n)

{if (n==0) return;

while (--n){if(key_flag) break;}

}

/****************红色PWM*****************************/

void pwm_R()

{

if(R==0) {outR_low ;delay_us(255);return;}

if(R==255){outR_high;delay_us(255);return;}

outR_high; delay_us(R);

outR_low ;delay_us(255-R);

}

/****************绿色PWM*****************************/ void pwm_G()

{

if(G==0) {outG_low ;delay_us(255);return;}

if(G==255){outG_high;delay_us(255);return;}

outG_high; delay_us(G);

outG_low ;delay_us(255-G);

}

/****************蓝色PWM*****************************/ void pwm_B()

{

if(B==0) {outB_low ;delay_us(255);return;}

if(B==255){outB_high;delay_us(255);return;}

outB_high; delay_us(B);

outB_low ;delay_us(255-B);

}

/****************橙色PWM*****************************/ void pwm_Y()

{

if(R==0) {outR_low ;outG_low ;delay_us(255);return;} if(R==255){outR_high;outG_high;delay_us(255);return;} outR_high;outG_high;delay_us(R);

outR_low ;outG_low; delay_us(255-R);

}

/****************青色PWM*****************************/

void pwm_Q()

{

if(G==0) {outG_low ;outB_low ;delay_us(255);return;}

if(G==255){outG_high;outB_high;delay_us(255);return;}

outG_high;outB_high;delay_us(G);

outG_low ;outB_low; delay_us(255-G);

}

/****************紫色PWM*****************************/

void pwm_Z()

{

if(R==0) {outR_low ;outB_low ;delay_us(255);return;}

if(R==255){outR_high;outB_high;delay_us(255);return;}

outR_high;outB_high;delay_us(R);

outR_low; outB_low; delay_us(255-R);

}

//************************************************************** void interrupt isf(void) //中断函数

{

if(RCIE&&RCIF)

{

key_backup=key_value;

key_value=RCREG;

if(key_value==light_add)

{

if(duty>5)duty-=5;

else duty=0;

key_value=key_backup;

return;}

if(key_value==light_sub)

{if(duty<250)duty+=5;

else duty=254;

key_value=key_backup;

return;}

if(key_value==speed_add)

{

if(time2>2) time2-=2;

if(time1>1) time1-=1;

key_value=key_backup;

return;

}

if(key_value==speed_sub) {

if(time2<300) time2+=2;

if(time1<50) time1+=1;

key_value=key_backup;

return;

}

if(key_value==key_backup) return;

if(key_value!=power_on&&key_backup==power_off) {key_backup=power_off;key_value=power_off;return;}

if(key_value==color3_sudden_change)

{R=duty;G=OFF; B=OFF;pwm_R();pwm_G();pwm_B();

k=0;key_flag=1;return;}

//场景1以红色开始

if(key_value==color6_sudden_change)

{R=duty; G=OFF;B=OFF;pwm_R();pwm_G();pwm_B();

k=0;key_flag=1;return;}

//场景2以绿色开始

if(key_value==color3_gradual_change)

{R=OFF; G=OFF; B=ON; pwm_R();pwm_G();pwm_B();

j=0;key_flag=1;return;}

//场景3以蓝色开始

if(key_value==color6_gradual_change)

{R=ON; G=OFF; B=OFF;pwm_R();pwm_G();pwm_B();

j=0;key_flag=1;return;}

//场景4以红色开始

}

}

//************************************************************** void main(void) //主函数

{

unsigned int i=0;

TRISC3=0; //设置为输出

TRISC4=0; //设置为输出

TRISC5=0; //设置为输出

RC3=1;

RC4=1;

RC5=1;

TRISC0=0; //设置为输出

TRISC1=0; //设置为输出

TRISC2=0; //设置为输出

RC0=0;

RC1=0;

RC2=0;

TXSTA=0x24;

RCSTA=0x90;

SPBRG=Fosc/16/BAUD-1;

GIE=1;

PEIE=1;

RCIE=1;

if(key_value==power_off)

{key_flag=0;

R=255;B=255;G=255;outR_high;outG_high;outB_high;}//关 if(key_value==color3_sudden_change)

{R=duty;G=OFF; B=OFF;pwm_R();pwm_G();pwm_B();

k=0;key_flag=1;} //场景1以红色开始

if(key_value==color6_sudden_change)

{R=OFF; G=duty;B=OFF;pwm_R();pwm_G();pwm_B();

k=0;key_flag=1;} //场景2以绿色开始

if(key_value==color3_gradual_change)

{R=OFF; G=OFF; B=ON; pwm_R();pwm_G();pwm_B();

j=0;key_flag=1;} //场景3以蓝色开始

if(key_value==color6_gradual_change)

{R=ON; G=OFF; B=OFF;pwm_R();pwm_G();pwm_B();

j=0;key_flag=1;} //场景4以红色开始

here:if(key_value==power_on)

{//key_flag=0;

R=255; B=255; G=255;

outR_high;outG_high;outB_high;

key_value=color3_gradual_change;}//关

if(key_value==power_off)

{key_flag=0;

R=255; B=255; G=255;

outR_high;outG_high;outB_high;goto here;}//关

if(key_value==single_red)

{key_flag=0;

R=duty;G=255; B=255;

pwm_R(); outG_high;outB_high;}//单红色

if(key_value==single_green)

{key_flag=0;

R=255; G=duty;B=255;

pwm_G(); outR_high;outB_high;}//单绿色

if(key_value==single_yellow)

{key_flag=0;

R=duty;G=duty;B=255;

pwm_Y(); outB_high;} //单黄色

if(key_value==single_blue)

{key_flag=0;

R=255; G=255; B=duty;pwm_B(); outR_high;outG_high;}//单蓝色 if(key_value==single_qing)

{key_flag=0;

R=255; G=duty;B=duty;pwm_Q(); outR_high;} //单青色 if(key_value==single_zi)

{key_flag=0;

R=duty;G=255; B=duty;pwm_Z(); outG_high;} //单紫色 if(key_value==color3_sudden_change)

//处理场景1--三色突变效果

{

k++;k%=3;

if(tubian_three_color[k]==red)

{outG_high;outB_high;R=duty;

for(i=0;i

{if(key_flag)

{key_flag=0;break;}

pwm_R();

}

}

else {R=OFF;outR_high;}

if(tubian_three_color[k]==green)

{outR_high;outB_high;G=duty;

for(i=0;i

{if(key_flag)

{key_flag=0;break;}

pwm_G();}}

else {G=OFF;outG_high;}

if(tubian_three_color[k]==blue) {outR_high;outG_high;

B=duty;for(i=0;i

{key_flag=0;break;}pwm_B();}}

else {B=OFF;outB_high;}

goto here;

}

if(key_value==color6_sudden_change)

//处理场景2--六色突变效果

{

k++;k%=6;

if(tubian_six_color[k]==red)

{outG_high;outB_high;

R=duty;for(i=0;i

{R=OFF;outR_high;}

if(tubian_six_color[k]==green)

{outR_high;outB_high;

G=duty;for(i=0;i

{G=OFF;outG_high;}

if(tubian_six_color[k]==blue)

{outR_high;outG_high;

B=duty;for(i=0;i

{B=OFF;outB_high;}

if(tubian_six_color[k]==yellow)

{outB_high;R=duty;

G=duty;for(i=0;i

if(tubian_six_color[k]==qing)

{outR_high;G=duty;

B=duty;for(i=0;i

if(tubian_six_color[k]==zi)

{outG_high;R=duty;

B=duty;for(i=0;i

goto here;

}

if(key_value==color3_gradual_change)

//处理场景3--三色渐变效果

{key_flag=0;

if(jianbian_three_color[j]==B_UP)

{for(i=0;i

if(B==ON){j++;j%=12;}

else {B-=1;}

goto here;}

if(jianbian_three_color[j]==R_UP)

{for(i=0;i

if(R==ON){j++;j%=12;}

else {R-=1;}

goto here;}

if(jianbian_three_color[j]==G_UP)

{for(i=0;i

if(G==ON){j++;j%=12;}

else {G-=1;}

goto here;}

if(jianbian_three_color[j]==Y_UP)

{for(i=0;i

if(R==ON){j++;j%=12;}

else {R-=1;G-=1;}

goto here;}

if(jianbian_three_color[j]==Q_UP)

{for(i=0;i

if(G==ON){j++;j%=12;}

else {G-=1;B-=1;}

goto here;}

if(jianbian_three_color[j]==Z_UP)

{for(i=0;i

if(B==ON){j++;j%=12;}

else {R-=1;B-=1;}

goto here;}

if(jianbian_three_color[j]==R_DOWN)

{for(i=0;i

if(R==OFF){j++;j%=12;}

else {R+=1;}

goto here;}

if(jianbian_three_color[j]==G_DOWN)

{for(i=0;i

if(G==OFF){j++;j%=12;}

else {G+=1;}

goto here;}

if(jianbian_three_color[j]==B_DOWN)

{for(i=0;i

if(B==OFF){j++;j%=12;}

else {B+=1;}

goto here;}

if(jianbian_three_color[j]==Y_DOWN)

{for(i=0;i

if(R==OFF){j++;j%=12;}

else {R+=1;G+=1;}

goto here;}

if(jianbian_three_color[j]==Q_DOWN)

{for(i=0;i

if(G==OFF){j++;j%=12;}

else {B+=1;G+=1;}

goto here;}

if(jianbian_three_color[j]==Z_DOWN)

{for(i=0;i

if(B==OFF){j++;j%=12;}

else {B+=1;R+=1;}

goto here;}

}

if(key_value==color6_gradual_change)

//处理场景4--六色渐变效果

{key_flag=0;

if(jianbian_six_color[j]==B_UP)

{for(i=0;i

if(B==ON){j++;j%=6;}

else {B-=1;}

goto here;}

if(jianbian_six_color[j]==R_UP)

{for(i=0;i

if(R==ON){j++;j%=6;}

else {R-=1;}

goto here;}

if(jianbian_six_color[j]==G_UP)

{for(i=0;i

if(G==ON){j++;j%=6;}

else {G-=1;}

goto here;}

if(jianbian_six_color[j]==R_DOWN)

{for(i=0;i

if(R==OFF){j++;j%=6;}

else {R+=1;}

goto here;}

if(jianbian_six_color[j]==G_DOWN)

{for(i=0;i

if(G==OFF){j++;j%=6;}

else {G+=1;}

goto here;}

if(jianbian_six_color[j]==B_DOWN)

{for(i=0;i

if(B==OFF){j++;j%=6;}

else {B+=1;}

goto here;}

}

goto here;

}

系统执行软件源程序代码

系统执行软件源程序代 码 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

附录一系统执行软件源程序代码一、系统多机通信从机源程序代码 ** *Lu Bo* ------------------------------------------------------------------------------------------------------------------------------------- ORG 0000H SJMP MAIN ORG 0023H ;串行口中断入口 SJMP SJCS ------------------主程序---------------------------------------------------------------------------------------------------------- MAIN: SLAVE EQU 12 DK EQU MOV SCON,#0B0H MOV TMOD,#20H MOV TL1,#0FDH MOV TH1,#0FDH MOV IE,#90H SETB TR1 LCALL WDCJ SETB RS1 CLR RS0 LCALL BCDZH LCALL DISPLAY CLR RS1 CLR RS0 SJMP MAIN ------------------串行口中断服务子程序---------------------------------------------------------------------------------- SJCS: CLR RI PUSH A PUSH PSW MOV A,SBUF XRL A,#SLAVE JZ SJCS0 SJCS1: SETB SM2 POP PSW POP A RETI

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1 DEC direct 直接地址减1 2 2

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

单片机蜂鸣器奏乐实验大全代码

单片机蜂鸣器奏乐实验大 全代码 This manuscript was revised by the office on December 10, 2020.

O R G0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:NOP MOV R6,A INC DPTR MOV A,#0 MOVC A,@A+DPTR MOV R7,A SETB TR0 MUSIC2:NOP CPL MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1 MUSIC3:NOP CLR TR0

MOV R2,#0DH MUSIC4:NOP MOV R2,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0:NOP MOV R2,#0FFH MUSIC6:MOV R3,#00H LJMP MUSIC0 DEL:NOP DEL3:MOV R4,#02H DEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

软件著作权-源代码范本

软件著作权-源代码范本 注意事项:常见的源代码包含:C语言,VB,C++,JAVA,.NET等。 提交的代码必须是源代码的开头载入程序,第30页必须断开,第60页是软 件的程序结尾,代码中不得出现与申请表内容不符合的日期,著作权人,软件名 字等,不能出现开源代码,不能出现任何版权纠纷。 格式要求:一、源代码应提交前、后各连续30页,不足60页的,应当全部提交。 、源代码页眉应标注软件的名称和版本号,应当与申请表中名称完全一致,页 眉右上应标注页码,源代码每页不少于50行。 范例如下: #i nclude #in elude #i nclude #in elude

#in elude #i nclude #i nclude #i nclude #i nclude #in clude #in clude #in clude #in clude #in clude #in clude #in clude #in clude #in clude #in clude #defi ne NS_MAIN 1 #i nclude #en dif #ifdef DLZ #in clude #en dif static tybs_boolean_t wan t_stats = TYBS_FALSE; static char static char static char static char static un sig ned program_ name[TYBS_DIR_NAMEMAX] = "n amed"; absolute_co nffile[TYBS_DIR_PATHMAX]; saved_comma nd_li ne[512]; versio n[512]; maxsocks = 0; n s_ma in _earlywar nin g(c onst char *format, ...) { va_list args; va_start(args, format); if (ns_g」ctx != NULL) { tybs_log_vwrite( ns_g」ctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_W ARNING, format, args); } else { fprin tf(stderr, "%s: ", program_ name); vfprin tf(stderr, format, args); fprin tf(stderr, "\n"); fflush(stderr); } va_e nd(args); } Void n s_ma in _earlyfatal(c onst char *format, ...) { va_list args; va_start(args, format); if (ns_g」ctx != NULL) { tybs_log_vwrite( ns_g」ctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL, format, args); tybs_log_write( ns_g」ctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL, "exit ing (due to early fatal error)"); } else { fprin tf(stderr, "%s: ", program, name); vfprin tf(stderr, format, args); fprin tf(stderr, "\n"); fflush(stderr); } va_e nd(args); exit(1); } static void assert ion _failed(c onst char *file, in t li ne, tybs_assert ion type_t type, const char *cond)

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.doczj.com/doc/fe8338472.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.doczj.com/doc/fe8338472.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.doczj.com/doc/fe8338472.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

单片机程序源代码

第二章 任务一:闪烁广告灯的设计 利用89C51单片机的端口控制两个LED ( DO和D1 ),编写程序,实现两个LED互闪。 #include #define uint unsigned int #define uChar unsigned Char sbit LED仁POP; sbit LED2=P0A1; void delayms(uint ms) { uint i; while(ms--) { for(i=O;i<12O;i++); } } void main() { while(1) { LED1=O; LED2=1; delayms(5OO); LED1=1; LED2=O; delayms(5OO); } } 任务二:流水广告灯的设计 利用89c51单片机的端口控制8个LED( D0~D7 )循环点亮,刚开始时DO点亮,延时片刻后,接着D1 点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->DO ,重复循环。 #include #include #define uint unsigned int #define uchar unsigned char uint i; uchar temp; uint a[8]={Oxfe,Oxfd,Oxfb,Oxf7,Oxef,Oxdf,Oxbf,Ox7f}; void delayms(uint ms) { while(ms--) { uint j; for(j=0;j<120;j++); } }

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/fe8338472.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/fe8338472.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/fe8338472.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

单片机编程源代码

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.doczj.com/doc/fe8338472.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

Matlab源程序代码

正弦波的源程序: (一),用到的函数 1,f2t函数 function x=f2t(X) global dt df t f T N %x=f2t(X) %x为时域的取样值矢量 %X为x的傅氏变换 %X与x长度相同并为2的整幂 %本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)]; x=ifft(X)/dt; end 2,t2f函数。 function X=t2f(x) global dt df N t f T %X=t2f(x) %x为时域的取样值矢量 %X为x的傅氏变换 %X与x长度相同,并为2的整幂。 %本函数需要一个全局变量dt(时域取样间隔) H=fft(x); X=[H(N/2+1:N),H(1:N/2)]*dt; end (二),主程序。 1,%(1)绘出正弦信号波形及频谱 global dt df t f N close all k=input('取样点数=2^k, k取10左右'); if isempty(k), k=10; end f0=input('f0=取1(kz)左右'); if isempty(f0), f0=1; end N=2^k; dt=0.01; %ms df=1/(N*dt); %KHz T=N*dt; %截短时间

Bs=N*df/2; %系统带宽 f=[-Bs+df/2:df:Bs]; %频域横坐标 t=[-T/2+dt/2:dt:T/2]; %时域横坐标 s=sin(2*pi*f0*t); %输入的正弦信号 S=t2f(s); %S是s的傅氏变换 a=f2t(S); %a是S的傅氏反变换 a=real(a); as=abs(S); subplot(2,1,1) %输出的频谱 plot(f,as,'b'); grid axis([-2*f0,+2*f0,min(as),max(as)]) xlabel('f (KHz)') ylabel('|S(f)| (V/KHz)') %figure(2) subplot(2,1,2) plot(t,a,'black') %输出信号波形画图grid axis([-2/f0,+2/f0,-1.5,1.5]) xlabel('t(ms)') ylabel('a(t)(V)') gtext('频谱图') 最佳基带系统的源程序: (一),用到的函数 f2t函数和t2f函数。代码>> (二),主程序 globaldt t f df N T close all clear Eb_N0 Pe k=input('取样点数=2^k, k取13左右'); if isempty(k), k=13; end z=input('每个信号取样点数=2^z, z

单片机指令表(最全)

单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。操作内容: PC←(PC)+2SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn),n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 5、ADD A,#data 指令名称:立即数加法指令指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C),n=0~7 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加 操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 8、ADDC A,@Ri 指令名称:间接寻址带进位加法指令指令代码:36H~37H 指令功能:累加器内容, 内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 9、ADDC A,#data 指令名称:立即数带进位加法指令指令代码:34H 指令功能:累加器内容、立即数及进位位相加 操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 10、AJMP addr11 指令名称:绝对转移指令 指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。操作内容:PC←(PC)+2PCl0~0←addrll 字节数: 2 机器周期:2 使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。 11、ANL A,Rn 指令名称:寄存器逻辑与指令指令代码:58H~5FH 指令功能:累加器内容逻辑与寄存器内容 操作内容:A←(A)∧(Rn),n=0~7 字节数: 1 机器周期:1 12、ANL A,direct 指令名称:直接寻址逻辑与指令指令代码:55H 指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容 操作内容:A←(A)

C单片机指令集大全

C单片机指令集大全 Document number【980KGB-6898YT-769T8CB-246UT-18GG08】

格式功能简述字节数周期 一、数据传送类指令 MOVA,Rn寄存器送累加器11 MOVRn,A累加器送寄存器11 MOVA,@Ri内部RAM单元送累加器11 MOV@Ri,A累加器送内部RAM单元11 MOVA,#data立即数送累加器21 MOVA,direct直接寻址单元送累加器21 MOVdirect,A累加器送直接寻址单元21 MOVRn,#data立即数送寄存器21 MOVdirect,#data立即数送直接寻址单元32 MOV@Ri,#data立即数送内部RAM单元21 MOVdirect,Rn寄存器送直接寻址单元22 MOVRn,direct直接寻址单元送寄存器22 MOVdirect,@Ri内部RAM单元送直接寻址单元22 MOV@Ri,direct直接寻址单元送内部RAM单元22 MOVdirect2,direct1直接寻址单元送直接寻址单元32 MOVDPTR,#data1616位立即数送数据指针32 MOVXA,@Ri外部RAM单元送累加器(8位地址)12 MOVX@Ri,A累加器送外部RAM单元(8位地址)12 MOVXA,@DPTR外部RAM单元送累加器(16位地址)12 MOVX@DPTR,A累加器送外部RAM单元(16位地址)12

MOVCA,@A+DPTR查表数据送累加器(DPTR为基址)12 MOVCA,@A+PC查表数据送累加器(PC为基址)12 XCHA,Rn累加器与寄存器交换11 XCHA,@Ri累加器与内部RAM单元交换11 XCHDA,direct累加器与直接寻址单元交换21 XCHDA,@Ri累加器与内部RAM单元低4位交换11 SWAPA累加器高4位与低4位交换11 POPdirect栈顶弹出指令直接寻址单元22 PUSHdirect直接寻址单元压入栈顶22 二、算术运算类指令 ADDA,Rn累加器加寄存器11 ADDA,@Ri累加器加内部RAM单元11 ADDA,direct累加器加直接寻址单元21 ADDA,#data累加器加立即数21 ADDCA,Rn累加器加寄存器和进位标志11 ADDCA,@Ri累加器加内部RAM单元和进位标志11 ADDCA,#data累加器加立即数和进位标志21 ADDCA,direct累加器加直接寻址单元和进位标志21 INCA累加器加111 INCRn寄存器加111 INCdirect直接寻址单元加121 INC@Ri内部RAM单元加111 INCDPTR数据指针加112

软件源代码转让合同

软件源代码转让合同 转让人(甲方): 法定住址: 法定代表人: 受让人(乙方): 法定住址: 法定代表人: 甲、乙双方本着平等自愿、真诚合作的原则,经双方友好协商,依据《中华人民共和国知识产权法》和《计算机软件保护条例》以及其他有关法律、法规的规定,就甲方向乙方转让_______________软件及源代码事宜达成如下协议,一起共同遵守。 第一条产品的名称 甲方将其享有知识产权的软件及源代码之全部知识产权利永久转让给乙方。转让软件及附属物品内容包括: 。 第二条转让权利种类 1.甲方向乙方转让全部地域范围内的全部知识产权; 第三条转让价金、交付转让日期 1.甲方无偿将软件知识产权转让乙方。 2.转让日期:合同签订5个工作日内。 第四条甲方权利与义务 1. 甲方应按本合同约定向乙方转让_______________软件产品、软件开发平台及全部的 源代码,并保证代码的完整性,可直接编译为应用程序正常使用。 2. 自本合同签订之日起,自乙方交接完毕之日起,乙方享有该转让软件及源代码的一 切知识产权。 3. 甲方向乙方提供《软件系统设计及使用说明书》,及全部的相关文档。 第五条乙方权利与义务 1. 自签订本协议之日起,乙方拥有该软件的著作权; 2. 乙方有权对此软件或源代码做出任意修改,并有权自由处置该软件或源代码。 第六条违约责任 1.如任何一方违反本合同约定给对方造成损失,守约方均可以要求对方承担违约责任; 2.如甲方侵害他人知识产权或违背现行各项法律或国家政策时,由甲方自行承担赔偿责任,与乙方无关;转让软件或源代码因此被有关机关扣留、没收,或禁止发行、使用的,甲方应赔偿乙方遭受的全部损失。 第七条保证条款 1.甲方保证拥有本产品的知识产权。并且此转让行为不侵犯任何第三方的合法权益。若甲方违反本条内容,则甲方构成违约,乙方有权解除合同,并有权要求甲方赔偿损失。 2.甲方保证所转让的软件产品符合中华人民共和国有关法律、法规规定及所附文档的功能说明。

51单片机指令表

此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1

基于单片机的温度控制器附程序代码

生产实习报告书 报告名称基于单片机的温度控制系统设计姓名 学号0138、0140、0141 院、系、部计算机与通信工程学院 专业信息工程10-01 指导教师 2013年 9 月 1日

目录 1.引言.................................. 错误!未定义书签。 2.设计要求.............................. 错误!未定义书签。 3.设计思路.............................. 错误!未定义书签。 4.方案论证.............................. 错误!未定义书签。方案一................................................. 错误!未定义书签。方案二................................................. 错误!未定义书签。 5.工作原理.............................. 错误!未定义书签。 6.硬件设计.............................. 错误!未定义书签。单片机模块............................................. 错误!未定义书签。 数字温度传感器模块 .................................... 错误!未定义书签。 DS18B20性能......................................... 错误!未定义书签。 DS18B20外形及引脚说明............................... 错误!未定义书签。 DS18B20接线原理图................................... 错误!未定义书签。按键模块............................................... 错误!未定义书签。声光报警模块........................................... 错误!未定义书签。数码管显示模块......................................... 错误!未定义书签。 7.程序设计.............................. 错误!未定义书签。主程序模块............................................. 错误!未定义书签。 读温度值模块.......................................... 错误!未定义书签。 读温度值模块流程图: ................................. 错误!未定义书签。

相关主题
相关文档 最新文档