闪烁灯一
/***********************************************************************/
#include #define uchar unsigned char //这里用\"uchar\"代替\"unsigned char\",\"uchar\"用来定义无符号字符型数。 #define uint unsigned int //\"uint\"用来定义无符号整型数。 sbit Show_LED = P0^0; KEIL专门用来声明某位IO口 //用来声明P0.0口为程序所要控制的端口,\"sbit\"是 /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del。这是通过软件延时,有一定误差。 * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { P0 = 0xff; //关闭所有LED while(1) { Show_LED = 1; Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms * del. Show_LED = 0; Delay(20); } } 闪烁灯二 /**********************************************************************/ #include #define uchar unsigned char #define uint unsigned int /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { P0 = 0xff; //关闭所有LED while(1) { /*下面四行用于控制LED每隔一个亮*/ P0 = 0xaa; Delay(50); P0 = 0x55; Delay(50); /*下面四行用于控制LED每隔一个亮*/ P0 = 0xcc; Delay(50); P0 = 0x33; Delay(50); /*下面四行用于控制LED 高四位 或者 低四位亮*/ P0 = 0x0f; Delay(50); P0 = 0xf0; Delay(50); /*下面八行用于控制LED的两次全亮 全灭*/ P0 = 0x00; Delay(25); P0 = 0xff; Delay(25); P0 = 0x00; Delay(25); P0 = 0xff; Delay(25); Delay(200); //延时两秒 } } 流水灯一 /***********************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { uchar i; while(1) { P0 = 0x7f; for(i=0; i<7; i++) { P0 = _cror_(P0, 1); Delay(15); } P0 = 0xfe; //P0.7亮亮 //移位7次 //_crol_()这个函数在intrins.h中定义了,用于循环右移 for(i=0; i<7; i++) { P0 = _crol_(P0, 1); //用于循环左移 Delay(15); } } } 流水灯二 /**********************************************************************/ #include #define uchar unsigned char #define uint unsigned int /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无 * 说明 :也可以使用例1的的方法来关闭数码管 ***********************************************************************/ void Main(void) { uchar i, temp; while(1) { temp = 0x7f; for(i=0; i<7; i++) { temp = temp >> 1; temp = temp | 0x80; P0 = temp; Delay(15); } temp = 0xfe; for(i=0; i<7; i++) { temp = temp << 1; temp = temp | 0x01; P0 = temp; Delay(15); //值右移一位 //把值赋给P0口 //延时0.15秒 //值左移一位 //把值赋给P0口 //延时0.15秒 } } } 数码管静态显示一 /**********************************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit KEY = P3^4; //独立按键的T0 /*下一行你可以试着把 code 去掉看看试验结果。 去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*/ /*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到 ROM 中去*/ uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; /*下一行的数组可以显示数值外,还可以显示数码管的点*/ uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uchar i = 0; //P2=0xff; P2=2; while(1) { P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示 //P0 = table_d[i % 16]; //带点显示 if(KEY == 0) { Delay(1); //软件消抖,试验为20ms if(KEY == 0) { i++; } Delay(50); //延时0.5秒后进行下一次的按键检测 } } } 数码管静态显示二(锁存器) /*************************************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit KEY = P3^4; //独立按键的T0 sbit KEY_Lock = P3^2; //这里,按了该按键后,实现解锁和开锁。 sbit LOCK = P3^7; //锁存功能 /*下一行你可以试着把 code 去掉看看试验结果。 去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*/ /*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到 ROM 中去*/ uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; /*下一行的数组可以显示数值外,还可以显示数码管的点*/ uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i ; } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uchar i = 0; LOCK = 1; //P2=0xff; while(1) { P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示 //P0 = table_d[i % 16]; //带点显示 if(KEY == 0) { Delay(1); //软件消抖,试验为20ms if(KEY == 0) { i++; } Delay(50); //延时0.5秒后进行下一次的按键检测 } if(KEY_Lock == 0) { Delay(1); if(KEY_Lock == 0) { LOCK = !LOCK; } Delay(50); } } //软件消抖,试验为20ms //延时0.5秒后进行下一次的按键检测 } 数码管动态显示 /***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_W[8] = {0,1,2,3,4,5,6,7}; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;jfor(x=0;x<=148;x++); } /******************************************************************** * 名称 : Main() * 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { while(1) { P0 = table[1]; P2 = LED_W[6]; Delay(3); P0 = table[2]; P2 = LED_W[7]; Delay(3); } } // i 值的 个位数 //点亮第一位数码管 // i 值的 个位数 //点亮第一位数码管 数码管滚动显示 /******************************************************************** * 文件名 : 动态显示.c * 描述 : * 创建人 : 东流,2009年8月30日 * 版本号 : 1.0 ***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_W[8] = {0,1,2,3,4,5,6,7}; uint Time_temp = 0, LED_temp = 0; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;jfor(x=0;x<=148;x++); } /******************************************************************** * 名称 : Time0_Init() * 功能 : 定时器的初始化,11.0592MZ晶振,50ms * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Time0_Init() { TMOD = 0x01; IE = 0x82; TH0 = 0x4c; TL0 = 0x00; TR0 = 1; } /******************************************************************** * 名称 : Time0_Int() * 功能 : 定时器中断,中断中实现 Count 加一 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Time0_Int() interrupt 1 { TH0 = 0x4c; TL0 = 0x00; Time_temp++; if(Time_temp == 4) 变一次 //定时器溢出时间50毫秒,隔0.2秒,数码管的数据改 { LED_temp++; Time_temp = 0; } } /******************************************************************** * 名称 : Main() * 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { uchar i = 0,j = 0; Time0_Init(); while(1) { P0 = table[(i + LED_temp) % 8]; //数码管段值 P2 = LED_W[j]; Delay(2); j++; i++; if(j == 8) { j = 0; i = 0; } } //点亮某一位数码管 //每个数码管都点亮了一次。 } 数码管字符动态显示 /*********************************************************************/ #include #define uchar unsigned char #define uint unsigned int //uchar code table[8] = {0x00,0x00,0x00,0x00,0x73,0x77,0x6d,0x6d}; PASS编码 //显示 uchar code table[8] = {0x00,0x00,0x00,0x76,0x79,0x38,0x38,0x3f}; //显示HELL0编码 uchar code LED_W[8] = {0,1,2,3,4,5,6,7}; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;jfor(x=0;x<=148;x++); } /******************************************************************** * 名称 : Main() * 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Main(void) { uchar i = 0,j = 0; while(1) { P0 = table[i]; P2 = LED_W[j]; Delay(2); j++; i++; if(j == 8) //数码管段值 //点亮某一位数码管 //每个数码管都点亮了一次。 { j = 0; i = 0; } } } 因篇幅问题不能全部显示,请点此查看更多更全内容for(j=0; j<1827; j++) //这个是通过软件仿真得出的数for(j=0; j<1827; j++)for(j=0; j<1827; j++)for(j=0; j<1827; j++)for(j=0; j<1827; j++)for(j=0; j<1827; j++)