1 流水灯流程框图:NY流水灯程序:/***********************************************************描述 : LED 流水灯的控制;8个LED 会进行流水灯的演示;***********************************************************/ #include<reg52.h>#define uchar unsigned chartemp 值赋给P1口延时 Temp 值左移一位 i=i+1i=0 temp=oxfe 开始 i<8#define uint unsigned intsbit PP=P3^6 ;/*********************************************************** * 名称 : Delay()* 功能 : 延时,延时时间为 10ms * del* 输入 : del* 输出 : 无***********************************************************/ void Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++) ;}/*********************************************************** * 名称 : Main()* 功能 : 实现灯的闪烁* 输入 : 无* 输出 : 无***********************************************************/ void Main(void){uchar i, temp;PP=0;while(1){temp = 0xfe ;for(i=0; i<8; i++){P1 = temp; //把值赋给P1口Delay(10); //延时(10毫秒 * j)秒temp = temp << 1; //值左移一位temp = temp | 0x01;}}}流水灯运行效果图:2 四位数码管静态显示流程框图:开始初始化P3=0P1=tabley[X]四位数码管静态显示程序:/*********************************************************** * 文件名 : 数码管显示.c* 描述 : 该程序为数码管静态显示程序。
***********************************************************/ #include<reg52.h>#define uchar unsigned char#define uint unsigned int//数码管的段码编码uchar tabley[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/*********************************************************** * 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无***********************************************************/ void main(){uchar i = 0;P3=0;P1 =tabley[5];while(1){}}四位数码管静态显示程序运行效果:3 独立按键数码管加减流程框图:开始i=88NKEY()==1Yi=i-1NKEY()==2Yi=i+1位1显示位2显示独立按键控制数码管显示加减程序:/*********************************************************** * 文件名:独立按键.c* 描述 : 数码管上最开始显示“88”。
按S1,数码管上的值减1.按S3,数码管上的值加1.***********************************************************/ #include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit KEY1 = P2^4;sbit KEY3 = P2^6;uint i=88;//数码管的段码编码Ucha table[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/*********************************************************** * 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无***********************************************************/ void Delay_1ms(uint i){uint x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++); }/*********************************************************** * 名称 : Delay()* 功能 : 延时,延时时间为 10ms * del* 输入 : del* 输出 : 无***********************************************************/ void Delay(uchar temp){uchar j;for(j=0;j<temp;j++){P1 = table[(i/10)%10];P3 = 0xfb;Delay_1ms(5);P1 = table[i%10];P3 = 0xf7;Delay_1ms(5);}}/*********************************************************** * 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无***********************************************************/ uchar KEY(void){if(KEY1==0 || KEY3==0 ){Delay(2); //20毫秒软件防抖if(KEY1 == 0){Delay(10);return 1;}if(KEY3 == 0){Delay(10);return 3;}}return 0;}/*********************************************************** * 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无***********************************************************/ void Main(void){uchar temp;while(1){temp = KEY();if(temp == 1){i--;}if(temp == 3){i++;}P1 = 0;P3 = 0xfb;P1 = table[(i/10)%10];Delay_1ms(3);P1 = 0;P3 = 0xf7;P1 = table[i%10];Delay_1ms(3);}}LCD液晶显示流程框图:开始延时30ms1602初始化显示第一行字符串单字符逐位显示第二行调用函数改变第一行改变第一列改变第一行改变第13位LCD液晶显示程序:/************************************************************ 文件名:液晶1602显示.c* 描述: 该程序实现了对液晶1602的控制。
第一行固定显示“Welcome To”。
第二行从左到右逐个显示“The MCU World”***********************************************************/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit E=P2^7; //1602使能引脚sbit RW=P3^3; //1602读写引脚sbit RS=P3^2; //1602数据/命令选择引脚/************************************************************ 名称: delay()* 功能: 延时,延时时间大概为5US。
* 输入: 无* 输出: 无***********************************************************/ void delay(){_nop_();_nop_();_nop_();_nop_();_nop_();}/*********************************************************** * 名称: Delay_1ms()* 功能: 延时子程序,延时时间为1ms * x* 输入: x (延时一毫秒的个数)* 输出: 无***********************************************************/ void Delay(uint i){uint x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}/*********************************************************** * 名称: bit Busy(void)* 功能: 这个是一个读状态函数,读出函数是否处在忙状态* 输入: 输入的命令值* 输出: 无***********************************************************/ bit Busy(void){bit busy_flag = 0;RS = 0;RW = 1;E = 1;delay();busy_flag = (bit)(P1 & 0x80);E = 0;return busy_flag;}/*********************************************************** * 名称: wcmd(uchar del)* 功能: 1602命令函数* 输入: 输入的命令值* 输出: 无***********************************************************/ void wcmd(uchar del){while(Busy());RS = 0;RW = 0;E = 0;delay();P1 = del;delay();E = 1;delay();E = 0;}/*********************************************************** * 名称: wdata(uchar del)* 功能: 1602写数据函数* 输入: 需要写入1602的数据* 输出: 无***********************************************************/ void wdata(uchar del){while(Busy());RS = 1;RW = 0;E = 0;delay();P1 = del;delay();E = 1;delay();E = 0;}/*********************************************************** * 名称: L1602_init()* 功能: 1602初始化,请参考1602的资料* 输入: 无* 输出: 无***********************************************************/void L1602_init(void){wcmd(0x38);Delay(5);wcmd(0x38);Delay(5);wcmd(0x38);Delay(5);wcmd(0x38);wcmd(0x08);wcmd(0x0c);wcmd(0x04);wcmd(0x01);}/************************************************************ 名称: L1602_char(uchar hang,uchar lie,char sign)* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下L1602_char(1,5,'b')* 输入: 行,列,需要输入1602的数据* 输出: 无***********************************************************/void L1602_char(uchar hang,uchar lie,char sign){uchar a;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;wcmd(a);wdata(sign);}/************************************************************ 名称: L1602_string(uchar hang,uchar lie,uchar *p)* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下L1602_string(1,5,"ab cd ef;")* 输入: 行,列,需要输入1602的数据* 输出: 无***********************************************************/void L1602_string(uchar hang,uchar lie,uchar *p){uchar a,b=0;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;while(1){wcmd(a++);if((*p == '\0')||(b==16)) break;b++;wdata(*p);p++;}}/*********************************************************** * 名称: Main()* 功能: 主函数* 输入: 无* 输出: 无***********************************************************/ void Main(){uchar i,*p;uchar table[16]={"The MCU World"};L1602_init();while(1){p = table;L1602_string(1,1," Welcome To ");for(i=0;i<13;i++){L1602_char(2,i+3,*p);p++;Delay(80);}Delay(500);wcmd(0x01);}}LCD液晶显示程序运行效果:4 查表花样闪烁灯:开始Table[]初始化Ni=0i<10P1=table[i]延时30msi++查表花样灯程序:/************************************************************ 描述 : 本实验,让8个LED不停显示依照规律轮流显示。