51单片机c语言源程序

更新时间:2024-04-07 05:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

51单片机c语言源程序(1)

Led,数码管,点阵部分

------源程序由东流电子编写,文档由本人整理上传

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

* 描述 : 点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char //这里用\代替\,\用来定义无符号字符型数。

#define uint unsigned int //\用来定义无符号整型数。 sbit Show_LED = P0^0; //用来声明P1.0口为程序所要控制的端口,\是KEIL专门用来声明某位IO口

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

* 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { Show_LED = 0; //点亮P1.0对应的LED while(1) { }

}/******************************************************************** * 描述 : 点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char //这里用\代替\,\用来定义无符号

字符型数。

#define uint unsigned int //\用来定义无符号整型数。

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { P0 = 0xfe; //点亮最后一个LED while(1) { }

}/********************************************************************

* 描述 : 点亮P0口的多个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 LED1、LED3、LED5、LED7点亮。 LED2、LED4、LED6、LED8不亮。 您会看到LED美丽的光芒。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char //这里用\代替\,\用来定义无符号字符型数。

#define uint unsigned int //\用来定义无符号整型数。 sbit LED1 = P0^0; //用来声明P0.0口为程序所要控制的端口,\是KEIL专门用来声明某位IO口 sbit LED2 = P0^1; sbit LED3 = P0^2; sbit LED4 = P0^3; sbit LED5 = P0^4; sbit LED6 = P0^5; sbit LED7 = P0^6; sbit LED8 = P0^7;

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁

* 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 1; LED5 = 0; LED6 = 1; LED7 = 0; LED8 = 1; while(1) { }

}/******************************************************************** * 文件名 : 闪烁灯.c

* 描述 : 点亮P0口的多个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 通过对P1口和P2口的直接赋值,来点亮LED LED1、LED3、LED5、LED7点亮。 LED2、LED4、LED6、LED8不亮。 相比前面一个代码,这个代码显得简洁的多。 如果是多为IO进行控制,建议大家直接对P1--P3进行操作。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char //这里用\代替\,\用来定义无符号字符型数。

#define uint unsigned int //\用来定义无符号整型数。

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void)

{

P0 = 0xaa; //相当于二进制 0B 1010 1010 while(1) { }

}/******************************************************************** * 描述 : 该程序是一个最简单的单片机代码。实现了一个LED的不停闪烁。 每个0.2秒,两灭交替一次。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char //这里用\代替\,\用来定义无符号字符型数。

#define uint unsigned int //\用来定义无符号整型数。 sbit Show_LED = P0^0; //用来声明P1.0口为程序所要控制的端口,\是KEIL专门用来声明某位IO口

/******************************************************************** * 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del。这是通过软件延时,有一定误差。 * 输入 : del * 输出 : 无

***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { while(1) {

Show_LED = 1;

Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms * del. Show_LED = 0; Delay(20); }

}/******************************************************************** * 描述 : 该程序是一个最简单的单片机代码。实现了一个LED的不停闪烁。 每个0.2秒,两灭交替一次。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char //这里用\代替\,\用来定义无符号字符型数。

#define uint unsigned int //\用来定义无符号整型数。 sbit Show_LED = P0^0; //用来声明P1.0口为程序所要控制的端口,\是KEIL专门用来声明某位IO口

/******************************************************************** * 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del。这是通过软件延时,有一定误差。 * 输入 : del * 输出 : 无

***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { while(1) {

Show_LED = 1;

Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms * del. Show_LED = 0; Delay(20); }

}/******************************************************************** * 描述 : 本实验,让8个LED不停显示依照规律轮流显示。 首先,8个LED分别两次间隔显示。然后高4位显示和低4位显示。 最后间隔全亮、全灭两次。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#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) { 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); //延时两秒 }

}/******************************************************************** * 描述 : 本实验,让8个LED不停显示依照规律轮流显示。 首先,8个LED分别两次间隔显示。然后高4位显示和低4位显示。 最后间隔全亮、全灭两次。 采用查表方式进行操作,代码更短。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#include

#define uchar unsigned char #define uint unsigned int

uchar code table[10]={0xaa,0x55,0xcc,0x33,0x0f,0xf0,0x00,0xff,0x00,0xff};

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

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无

***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i

/******************************************************************** * 名称 : Main()

* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i; while(1) { for(i=0;i<10;i++) { P0 = table[i]; Delay(30); //延时0.3秒 } }

}/******************************************************************** * 描述 : 该程序用于学习 LED流水灯 的控制方法。 8个LED会进行流水灯的演示 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

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

#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, temp; while(1) { temp = 0xfe; for(i=0; i<8; i++) { P0 = temp; //把值赋给P1口 Delay(10); //延时(10毫秒 * j)秒 temp = temp << 1; //值右移一位 temp = temp | 0x01; } } }

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

* 文件名 : 数码管显示.c

* 描述 : 该程序为数码管静态显示程序。 程序实现了最右边数码管的显示一个5,大家可以在程序中修改相应的值而在数码管上显示相应的数字。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char

#define uint unsigned int

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

=

//下一行的数组可以显示数值外,还可以显示数码管的点 uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar i = 0; P2 = 6; //通过74HC138来控制数码管的位选,P2=0或1,2,3,4,5,6,7点亮相应的数码管 P0 = table[5]; //显示5,大家可以修改里面的数据。 while(1) { } }

/******************************************************************** * 文件名 : 数码管显示.c

* 描述 : 该程序为数码管静态显示程序。 程序实现了最右边数码管的显示一个5,大家可以在程序中修改相应的值而在数码管上显示相应的数字。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//数码管的段码编码 uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //下一行的数组可以显示数值外,还可以显示数码管的点 uchar table_d[16] =

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar i = 0; P2 = 7; //数码管的最后一位显示 P0 = table_d[5]; //显示5,大家可以修改里面的数据。 while(1) { } }

/******************************************************************** * 描述 : 用单个数码管来模拟流水灯。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //下一行的数组可以显示数值外,还可以显示数码管的点 uchar 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 = 7; while(1) { P0 = 0xfe; for(i=0;i<8;i++) { Delay(20); P0 = P0 << 1; P0 = P0 | 0x01; } } }

/******************************************************************** * 文件名 : 动态显示.c

* 描述 : 8位数码管低两位交替显示 “1,2” 这里是做一个动态的演示实验。 最开始,两个数码管闪烁间隔时间为150豪秒,每闪烁一次, 间隔时间减少2毫秒,当间隔时间小到一定程度的时候, 因为人的视觉暂留现象,就不会发现数码管在闪烁了。 * 创建人 : 东流,2012年2月308

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i=100; //最大闪烁值为0.15秒 while(1) { P0 = 0; //这里让数码管每段不显示 ,这样可以取掉余晖。 P2 = 6; //点亮第二位数码管(从右往左数) P0 = table[1]; // i 值的 个位数 Delay(i); P0 = 0; P2 = 7; //点亮第一位数码管 P0 = table[2]; // i 值的 个位数 Delay(i); if(i!=2) //假如i没有减小到2,执行括号里的语句 { i=i-2; //数码管每闪烁一次,i的值减2 } } }

/******************************************************************** * 文件名 : 动态显示.c

* 描述 : 8位数码管低两位分别显示 1,2 * 创建人 : 东流,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] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { while(1) { P0 = 0; //消隐 P2 = 6; //点亮第二位数码管(从右往左数) P0 = table[1]; // i 值的 个位数 Delay(3); P0 = 0; //消隐 P2 = 7; //点亮第一位数码管 P0 = table[2]; // i 值的 个位数 Delay(3); } }

/******************************************************************** * 文件名 : 动态显示.c

* 描述 : 八位数码管依次显示0,1,2,3,4,5,6,7 这里是做一个动态的演示实验。 最开始,两个数码管闪烁间隔时间为50豪秒,每闪烁一次, 间隔时间减少1毫秒,当间隔时间小到一定程度的时候,

因为人的视觉暂留现象,就不会发现数码管在闪烁了。 * 创建人 : 东流,2012年2月7日 * 版本号 : 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};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i,j=50; while(1) { for(i=0;i<8;i++) {

//每位数码管依次闪烁 P0 = 0; //消隐 P2 = i; //选择哪一位数码管点亮 P0 = table[i]; //赋值段码给P0口 Delay(j); //延时 }

if(j>=3) //当大于3毫秒的时,执行括号中的语句 { j-=1; //延时时间自减1毫秒

} } }

/******************************************************************** * 文件名 : 动态显示.c

* 描述 : 八位数码管依次显示0,1,2,3,4,5,6,7 * 创建人 : 东流,2012年2月7日 * 版本号 : 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};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i; while(1) { for(i=0;i<8;i++) { P0 = 0; P2 = i; //选择哪一位数码管点亮 P0 = table[i]; //赋值段码给P0口

Delay(9); //延时0.02秒 } } }

/******************************************************************** * 文件名 : 数码管滚动显示.c

* 描述 : 八个数码管显示0--7,每个0.5秒钟,数据从左往右移动一位 * 创建人 : 东流,2012年2月7日 * 版本号 : 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};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i; while(1) { for(i=0;i<8;i++) { P0 = table[5]; //数码管段值 P2 = i; //点亮某一位数码管

Delay(200); } } }

/******************************************************************** * 文件名 : 数码管滚动显示.c

* 描述 : 八个数码管显示0--7,每个0.64秒钟,数据从左往右移动一位 * 创建人 : 东流,2012年2月7日 * 版本号 : 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] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uint LED_temp = 0;

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j

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

* 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i,j; while(1) { //j自加一次,在内层循环已经走了16毫秒 for(j=0;j<40;j++)

{ }

for(i=0;i<8;i++) { P0 = 0; //消隐 P2 = i; //点亮某一位数码管 P0 = table[(i - LED_temp) % 8]; //数码管段值 Delay(2); //延时0.02秒 }

LED_temp -=1; //LED_temp这个变量自减1 } }

/******************************************************************** * 文件名 : 数码管滚动显示.c

* 描述 : 八个数码管显示0--7,每个0.64秒钟,数据从左往右移动一位 * 创建人 : 东流,2012年2月7日 * 版本号 : 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}; uint LED_temp = 0;

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

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

void Main(void) { uchar i,j; while(1) { 16毫秒

//j自加一次,在内层循环已经走了

for(j=0;j<40;j++) { }

for(i=0;i<8;i++) { }

P0 = 0; //消隐 P2 = i; //点亮某一位数码管 P0 = table[(i + LED_temp) % 8]; //数码管段值 Delay(2); //延时0.02秒

LED_temp +=1; //LED_temp 自加1

} }

/******************************************************************** * 文件名 : 数码管显示.c

* 描述 : 该程序为单位数码管静态显示程序。 程序实现了单个数码管的显示。每隔0.5秒依次显示:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f. * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/******************************************************************** * 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无

***********************************************************************/ void Delay(uint del) {

=

uint i,j; for(i=0; i

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar i = 0; P2 = 7; //最后一位数码管被点亮 while(1) { P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示 i++;

Delay(50); //延时0.5秒后显示下一个数 } }

/******************************************************************** * 文件名 : 数码管显示.c

* 描述 : 该程序为数码管静态显示程序。 两位数码管进行自加显示 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

=

***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uint i = 0,j; while(1) { for(j=0;j<100;j++) { P0 = 0; //消隐 P2 = 6; //第6位数码管显示 P0 = table[(i / 10)]; //在这里取 i 的个位数 Delay_1ms(3); //延时3毫秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第7位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数 Delay_1ms(3); //延时3毫秒后显示下一个数 } i++; } }

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

* 文件名 : 数码管显示.c

* 描述 : 该程序为数码管静态显示程序。 三位数码管进行自加显示。0--999 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

* 杜邦线接法:用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。 用单排针P2.0接J13的8端,P2.1接J13的7端。P2.2接J13的6端。 ***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uint i = 0,j; while(1) { for(j=0;j<10;j++) { P0 = 0; //消隐 P2 = 5; //第6位数码管显示 P0 = table[(i / 100)]; //在这里取 i 的百位数 Delay_1ms(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 6; //第7位数码管显示 P0 = table[(i / 10)]; //在这里取 i 的十位数 Delay_1ms(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第8位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数

=

Delay_1ms(3); //延时0.5秒后显示下一个数 } i++; } }

/******************************************************************** * 文件名 : 数码管字符显示.c

* 描述 : 这个代码可以实现数码管的字符显示。 这个是数码管的一个扩展实验,可以让数码管显示一些简单的字符。 这里实验中,我们在数码管的右边5位,现实了“HELLO * 创建人 : 东流,2012年2月7日 * 版本号 : 1.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] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i; while(1)

{ for(i=0;i<8;i++) { P0 = 0; //消隐 P2 = i; //点亮某一位数码管 P0 = table[i]; //数码管段值 Delay(2); } } }

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

* 文件名 : 动态显示.c

* 描述 : 在数码管上的每位每个0.3秒,显示7,6,5,4,3,2,1,0. 如果按下S19不放(独立按键左边的那个),这时,数码管段选被锁存, 这个时候,虽然代码在改变段选的值,但是,我们看到数码管上的值是不变的。

* 创建人 : 东流,2012年2月7日 * 版本号 : 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] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

sbit KEY1 = P3^2;

sbit LOCKDuan = P3^7;

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) { uchar i; while(1) { for(i=0;i<8;i++) { //每位数码管依次闪烁 P2 = i; //选择哪一位数码管点亮 P0 = table[i]; //赋值段码给P0口 Delay(300); //延时0.3秒 if(KEY1 == 0) //按下S19,这时数码管段选锁存 { LOCKDuan = 0; //给74HC573段选芯片锁存端口赋值低电平 } else { LOCKDuan = 1; } } } }

/******************************************************************** * 文件名 : 数码管显示.c

* 描述 : 在最右端的三位数码管显示倒计时。 到计时到0时,三个数码管一起闪烁。 * 创建人 : 东流,2012年2月7日 * 版本号 : 1.0

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int uchar i=200;

//数码管的段码编码 uchar table[16]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //带点数码管的段码编码 uchar table_d[16]

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

=

=

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j

/******************************************************************** * 名称 : DisLED(void)

* 功能 : 三位数码管显示,一共消耗了9毫秒 * 输入 : 无 * 输出 : 无

***********************************************************************/ void DisLED(void) { P0 = 0; //消隐 P2 = 5; //第6位数码管显示 P0 = table[(i / 100)]; //在这里取 i 的百位数 Delay(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 6; //第7位数码管显示 P0 = table_d[(i / 10)]; //在这里取 i 的十位数 Delay(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第8位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数 Delay(4); //延时0.5秒后显示下一个数 }

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar j; while(1)

{

if(i != 0)

//i不等于0,那么 进行数码管的显示,10* 10=100毫

{ for(j=0;j<10;j++) { DisLED(); } i--; } else { for(j=0;j<8;j++) {

}

DisLED();

//调用数码管显示代码

//数码管显示

P0 = 0x00; //数码管不显示 Delay(200); } } }

/******************************************************************** * 文件名 : 点阵显示.c

* 描述 : 这个代码在点阵上显示相应的图形。 * 创建人 : 东流,2012年2月7日 * 版本号 : 2.0

*点阵的开关是J16。需要用点阵的时候,把J16跳线帽接上就可以了。 *不用点阵功能的时候,请把点阵开关J16跳线帽取掉。

***********************************************************************/ #include #include

#define uint unsigned int #define uchar unsigned char //心形显示

unsigned char code tabP0[]={0x0c,0x12,0x22,0x44,0x22,0x12,0x0c,0x00}; unsigned char code tabP2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};

//圆形显示

//unsigned char code tabP0[]={0x00,0x3c,0x42,0x42,0x42,0x42,0x3c,0x00};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//菱形显示

//unsigned char code tabP0[]={0x00,0x08,0x14,0x22,0x41,0x22,0x14,0x08};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//叉形显示

//unsigned char code tabP0[]={0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//中字显示

//unsigned char code tabP0[]={0x00,0x1e,0x12,0x12,0x7f,0x12,0x12,0x1e};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay_1ms(uchar i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { int i; while(1) { for(i=0;i<8;i++) { P0=0; P2=tabP2[i]; P0=tabP0[i]; Delay_1ms(2); } } }

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

* 文件名 : 点阵显示.c

* 描述 : 可以看到箭头按照从左到右的方向移动 * 创建人 : 东流,2012年2月7日 * 版本号 : 2.0

*点阵的开关是J16。需要用点阵的时候,把J16跳线帽接上就可以了。 *不用点阵功能的时候,请把点阵开关J16跳线帽取掉。

***********************************************************************/ #include #include

#define uint unsigned int #define uchar unsigned char //心形显示

unsigned char tabP0[]={0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x00,}; unsigned char tabP2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; unsigned char TEMP[8];

//圆形显示

//unsigned char code tabP0[]={0x00,0x3c,0x42,0x42,0x42,0x42,0x3c,0x00};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//菱形显示

//unsigned char code tabP0[]={0x00,0x08,0x14,0x22,0x41,0x22,0x14,0x08};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//叉形显示

//unsigned char code tabP0[]={0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//中字显示

//unsigned char code tabP0[]={0x00,0x1e,0x12,0x12,0x7f,0x12,0x12,0x1e};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay_1ms(uchar i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar i,j,temp=0; for(i=0;i<8;i++) { TEMP[i]=tabP2[i]; } while(1) { for(j=0;j<8;j++) { for(i=0;i<8;i++) { P0=0; P2=tabP2[i]; P0=tabP0[i]; Delay_1ms(2); } } for(i=0;i<8;i++) { TEMP[i]=_crol_(TEMP[i],1); tabP2[i]=TEMP[i]; } } }

/******************************************************************** * 文件名 : 点阵显示.c

* 描述 : 这个代码在点阵上显示相应的图形。 * 创建人 : 东流,2012年2月7日 * 版本号 : 2.0

*点阵的开关是J16。需要用点阵的时候,把J16跳线帽接上就可以了。 *不用点阵功能的时候,请把点阵开关J16跳线帽取掉。

***********************************************************************/ #include #include

#define uint unsigned int #define uchar unsigned char //心形显示

unsigned char tabP0[]={0x00,0x10,0x30,0x7E,0x7E,0x30,0x10,0x00}; unsigned char tabP2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; unsigned char TEMP[8];

//圆形显示

//unsigned char code tabP0[]={0x00,0x3c,0x42,0x42,0x42,0x42,0x3c,0x00};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//菱形显示

//unsigned char code tabP0[]={0x00,0x08,0x14,0x22,0x41,0x22,0x14,0x08};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//叉形显示

//unsigned char code tabP0[]={0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

//中字显示

//unsigned char code tabP0[]={0x00,0x1e,0x12,0x12,0x7f,0x12,0x12,0x1e};

//unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay_1ms(uchar i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { uchar i,j,temp=0;

for(i=0;i<8;i++) { TEMP[i]=tabP0[i]; } while(1) { for(j=0;j<8;j++) { for(i=0;i<8;i++) { P0=0; P2=tabP2[i]; P0=tabP0[i]; Delay_1ms(2); } } for(i=0;i<8;i++) { TEMP[i]=_crol_(TEMP[i],1); tabP0[i]=TEMP[i]; } } }

/******************************************************************** * 文件名 : 点阵显示.c

* 描述 : 这个代码在点阵上显示相应的图形。 * 创建人 : 东流,2012年2月7日 * 版本号 : 2.0

*点阵的开关是J16。需要用点阵的时候,把J16跳线帽接上就可以了。 *不用点阵功能的时候,请把点阵开关J16跳线帽取掉。

***********************************************************************/ #include #include

#define uint unsigned int #define uchar unsigned char //心形显示

unsigned char code tabP0[6][8]={

{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00}, {0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00}, {0x00,0x00,0x10,0x38,0x38,0x10,0x00,0x00}, {0x00,0x00,0x38,0x7C,0x7C,0x38,0x00,0x00}, {0x00,0x38,0x7C,0x7C,0x7C,0x7C,0x38,0x00},

{0x3C,0x7E,0xFF,0xFF,0xFF,0xFF,0x7E,0x3C}};

unsigned char code tabP2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无

***********************************************************************/ void Delay_1ms(uchar i)//1ms延时 { uchar x,j; for(j=0;j

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main() { int i,j,k; while(1) { for(j=0;j<6;j++) { for(k=0;k<25;k++) { for(i=0;i<8;i++) { P0=0; P2=tabP2[i]; P0=tabP0[j][i]; Delay_1ms(2); } } } } }

本文来源:https://www.bwwdw.com/article/rjar.html

Top