基于单片机(c语言控制的)一个4位数码管从左到右依次显示1234程序设计及proteus仿真图

合集下载

4位数码管循环

4位数码管循环

4位数码管循环4位数码管可以显示0-9的数字,因此可以通过循环实现数字的循环显示。

一种简单的方式是使用四个数码管分别显示个位、十位、百位和千位的数字。

通过循环不断更新这四个数码管的显示内容,就可以实现数字的循环显示。

以下是一个示例代码:```c#include <avr/io.h>#include <avr/delay.h>void displayDigit(uint8_t digit){// 根据数字设置对应的数码管段亮起switch (digit) {case 0:PORTA = 0b00111111;break;case 1:PORTA = 0b00000110;break;case 2:PORTA = 0b01011011;break;case 3:PORTA = 0b01001111;break;case 4:PORTA = 0b01100110;break;case 5:PORTA = 0b01101101;break;case 6:PORTA = 0b01111101;break;case 7:PORTA = 0b00000111;break;case 8:PORTA = 0b01111111;break;case 9:PORTA = 0b01101111;break;default:// 如果传入的数字不在0-9之间,将所有数码管熄灭 PORTA = 0b00000000;break;}}int main(void){// 设置端口A为输出端口DDRA = 0xFF;while (1) {for (int i = 0; i < 10000; i++) {int thousands = i / 1000;int hundreds = (i % 1000) / 100;int tens = (i % 100) / 10;int ones = i % 10;// 分别显示千位、百位、十位和个位的数字displayDigit(thousands);_delay_ms(10);displayDigit(hundreds);_delay_ms(10);displayDigit(tens);_delay_ms(10);displayDigit(ones);_delay_ms(10);}}return 0;}```此代码使用的是ATmega系列的单片机,使用了端口A的8个引脚来控制四个数码管的段的亮灭。

基于单片机的直流电机调速系统设计

基于单片机的直流电机调速系统设计

总体设计方框图
电源模块
直流电 机驱动 模块 直流 电机
AT89S52
霍尔传感器
4为数码管 显示模块 控制部分
AT89C51的储存空间 大,而且ROM可以扩 展并且其引脚数比较多, 而且,它的寄存器只有 一个地址区间,编程简 单
直流电机转速

根据基尔霍夫第二定律,得到电枢电压电动势平衡方程式 U=Ea+Ia(Ra+Rc)……………式1 式1中,Ra为电枢回路电阻,电枢回路串联保绕阻与电刷接触 电阻的总和;Rc是外接在电枢回路中的调节电阻 由此可得到直流电机的转速公式为: n=(Ua-IR)/CeΦ ………………………式2 式2中,Ce为电动势常数,Φ是磁通量。 由1式和2式得 n=Ea/CeΦ ……………………………式3 由式3中可以看出,对于一个已经制造好的电机,当励磁电压 和负载转矩恒定时,它的转速由回在电枢两端的电压Ea决定, 电枢电压越高,电机转速就越快,电枢电压降低到0V时,电机 就停止转动;改变电枢电压的极性,电机就反转。
数码管显示部分
本设计使用的是一种比较常用的是四位数码管,内部的4 个数码管共用a~dp这8根数据线,为使用提供了方便,因 为里面有4个数码管,所以它有4个公共端,加上a~dp, 共有12个引脚,下面便是一个共阴的四位数码管的内部 结构图(共阳的与之相反)
电源电路
软件部分(程序设计)
控制系统程序总流程图:
PWM脉宽调速
PWM(脉冲宽度调制)是通过控制固定电压的 直流电源开关频率,改变负载两端的电压,从 而达到控制要求的一种电压调整方法。在PWM 驱动控制的调整系统中,按一个固定的频率来 接通和断开电源,并且根据需要改变一个周期 内“接通”和“断开”时间的长短。通过改变 直流电机电枢上电压的“占空比”来达到改变 平均电压大小的目的,从而来控制电动机的转 速。也正因为如此,PWM又被称为“开关驱动 装置”。

单片机 4位时钟数码管

单片机 4位时钟数码管

单片机控制4位时钟数码管的方法如下:
连接硬件:将4位数码管的共阳(或共阴)引脚连接到单片机的I/O口,连接数码管的段选引脚到单片机的另外4个I/O口。

同时,连接一个晶振和相关的电容电阻到单片机的时钟输入引脚和地。

设置引脚:在代码中定义每个数码管引脚对应的I/O口为输出模式,用于控制数码管的显示。

编写代码:使用单片机的定时器功能,通过编程计算出每个数码管显示的数字对应的段选编码,并在定时器中断服务程序中更新数码管的显示。

调试程序:将程序下载到单片机中,通过观察数码管的显示效果,调整程序中的参数或代码,以达到预期的显示效果。

需要注意的是,具体的实现方式可能因单片机的型号和数码管的类型而有所不同,需要根据实际情况进行相应的调整。

四位数码管编程实例

四位数码管编程实例

本节课所需教具
小数点朝下 从红色线开始第四个孔 插数字2 接着就是数字3 4 5 6 7
从红色线开始 第四个孔插数字8 注意小数点的位置
然后挨着插入数字9 10 11 12 13
程序理解 :数字代表我们所插引脚 高低代表所选择高电平 低电平
显示数字 2 3
ቤተ መጻሕፍቲ ባይዱ
显示数字4
重点
应用范围: 数码管是显示屏其中一类, 通过对其不同的管脚输入相 对的电流,会使其发亮,从而显示出数字能够显示 时间、 日期、温度等所有可用数字表示的参数。 由于它的价格便宜,使用简单,在电器特别是家电领域 应用极为广泛,空调、热水器、冰箱等等。绝大多数热 水器用的都是数码管,其他家电也用液晶屏与荧光屏。
其中引脚: A1--------13 A2--------10 A3--------9 A4-------7
模拟连线
定义函数编辑(注意:定义函数
的名称首位一定大写)
数字1程序编辑
数字2程序编辑
数字3程序编辑
数字4程序编辑
选择Loop模块 调用函数
(注意:调用函数一定加时间)
程序数字显示效果为 1 2 3 4
数码管
数码管也称LED数码管
LED灯数码管是由多个发光二极管封装在一起组成8”字型 的器件,引线已在内部连接完成,只需引出它们的各个 笔划,常用段数一般为7段有的另加一个小数点。
数码管按发光二极管封装在一起组成8”字型的器件,可分 为1位,2位,3位,4位,等多位数码管
按发光二极管单元连接方式可分为共阳极数码管和共阴极 数码管。

四位拨动开关控制数码管显示系统设计书

四位拨动开关控制数码管显示系统设计书

四位拨动开关控制数码管显示系统设计书1.设计背景单片机具有人机对话功能,开关,键盘是实现人机对话的主要输入设备,也是最常用的设备,通过它能发出各种控制指令和数据到单片机。

而二极管,数码管,LED显示器是常用的输出设备,单片机接受一系列指令到,执行一定功能后,可通过这些设备输出。

为了更好的掌握单片机的硬件特性以及用汇编语言进行编程设计,我们运用目前所学的知识,来设计了一个单片机最小系统——用拨码开关控制数码管显示系统。

2.设计方案2.1方案一使用单片机P1口,由4位DIP开关从P1口低四位输入,高四位输出,译码部分采用74LS247译码器,送往共阳极数码管显示。

本方案编程简单,占用I/O端口少,但电路设计较复杂,硬件增多,成本增高。

2.2方案二本方案的译码部分由单片机编程实现,P1口接共阳数码管,由4位DIP开关从P0口低四位输入,经软件译码,送往P1口,在数码管显示相应的数字。

由于译码部分采用了软件实现,省去了译码电路,成本降低,电路设计简单,但编程较方案一复杂,而且占用I/O端口多,占用系统资源。

综合考虑,确定采用方案二实现。

3.方案实施3.1输入输出电路设计该设计以AT89S52单片机为核心部件,AT89S52单片机有4个双向的8位并行I/0口,分别记为P0、P1、P2和P3口。

本次设计中主要使用P0作为输入口,P1作为输出口。

P0口:P0口为一个8位漏级开路双向I/O口,每个脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。

P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

单片机数码管动态显示1234-9999

单片机数码管动态显示1234-9999

一、实验目的1.掌握Keil软件的基本使用2.学习和掌握C语言编写程序的一般格式3.了解数码管与单片机的接口方法;4.了解数码管性能及动态显示编程方法;5.了解并掌握单片机系统中定时器中断控制的基本方法;二、实验内容用定时器中断实现四位数码管动态显示从1234-9999。

三、实验原理3.1基础知识介绍A.数码管是LED的升级,每位数码管里面继承了8个LED,点亮数码管就是点亮数码管里面的LED。

要在数码管上面显示相应的值,就是点亮不同位置的LED。

数码管有共阴和共阳两种,共阴数码管公共端是所有LED的负极连接在一起,相反共阳数码管公共端是所有LED的正极连接在一起。

一般公共端称作“位选”,控制每一个LED的称为“段选”。

数码管主要是利用视觉暂留的效果,通过快速循环点亮数码管方式,将数据呈现出来。

数码管如图1.2所示1.2数码管1.3数码管实物图/B.定时器定时器也可看作是对计算机机器周期的计数器。

因为每个机器周期包含12个振荡周期,故每一个机器周期定时器加1,可以把输入的时钟脉冲看成机器周期信号。

故其频率为晶振频率的1/12。

如果晶振频率为12MHz,则定时器每接收一个输入脉冲的时间刚好为1μs。

定时器有两种工作模式,分别为计数模式和定时模式。

对Px,y 的输入脉冲进行计数为计数模式。

定时模式,则是对MCU的主时钟经过12分频后计数。

因为主时钟是相对稳定的,所以可以通过计数值推算出计数所经过的时间。

计数器的计数值存放于特殊功能寄存器中。

T0(TL0-0x8A, TH0-0x8C), T1(TL1-0x8B, TH1-0x8D)定时器工作原理如下图由上图可见与定时器相关的寄存器主要有下面这几个:TMOD、TCON、TL0、TH0、TL1、TH1。

下面介绍一下这几个寄存器16位加法计数器:是定时计数器的核心,其中TL0、TH0、是定时计数器0的底八位和高八位;TL1、TH1是定时计数器1的底八位和高八位;并且高八位和底八位可单独使用。

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法EA /VP 31X119X218RE SET 9RD 17W R 16INT 012INT 113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSE N29AL E/P 30TX D 11RX D 10U18051AB C D abcd efg d pL1A 7B 1C 2D 6LT 3BI 4LE5A 13B 12C 11D 10E 9F 15G14U24511VCCY1CRYSTA LC133pC233pR110kC310uFS1VCCR21k R31k R41k R51k R61k R71k R81k12345678161514131211109RP 1VCCS2电路如图所示。

相应的C 语言程序为: #includeunsigned int a0,a1,a2,a3,a; int t;sbit key=P0^2;void showit();//用于在数码管上显示的子程序 void delay_n40us(unsigned int n);void delay_n40us(unsigned int n) {unsigned int i; unsigned char j; for(i=n;i>0;i--) for(j=0;j<2;j++) ; }void showit() { t=10;while(t--) { a3=a/1000; a2=(a00)/100; a1=(a0)/10; a0=a;P1=0xe0+a0;delay_n40us(200);P1=0xd0+a1;delay_n40us(200);P1=0xb0+a2;delay_n40us(200);P1=0x70+a3;delay_n40us(200);}}void main(){a=6999;while(1){if(key==1){a=a-1;showit();}else showit();}}最后说说这个电路都实现了什么功能:即整机供电后,数码管从“6999”开始倒计数,此过程中如果开关S2被按下,则会停止倒计时,松开开关后倒计时继续。

4位共阴数码管显示代码

4位共阴数码管显示代码

4位共阴数码管显示代码共阴数码管是一种常见的数码显示器件,它由4位7段数码管组成,每个数码管由7个LED组成,可以显示0-9的数字以及一些字母。

在控制4位共阴数码管显示数字的代码中,通常会使用单片机或者其他微控制器来实现。

下面是一个简单的示例代码,使用Arduino来控制4位共阴数码管显示数字:c.int digitPins[] = {2, 3, 4, 5}; // 数码管的位选引脚。

int segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; // 数码管的段选引脚。

// 数码管显示的数字0-9的编码。

int numbers[10][7] = {。

{1, 1, 1, 1, 1, 1, 0}, // 0。

{0, 1, 1, 0, 0, 0, 0}, // 1。

{1, 1, 0, 1, 1, 0, 1}, // 2。

{1, 1, 1, 1, 0, 0, 1}, // 3。

{0, 1, 1, 0, 0, 1, 1}, // 4。

{1, 0, 1, 1, 0, 1, 1}, // 5。

{1, 0, 1, 1, 1, 1, 1}, // 6。

{1, 1, 1, 0, 0, 0, 0}, // 7。

{1, 1, 1, 1, 1, 1, 1}, // 8。

{1, 1, 1, 1, 0, 1, 1} // 9。

};void setup() {。

for (int i = 0; i < 4; i++) {。

pinMode(digitPins[i], OUTPUT); }。

for (int i = 0; i < 7; i++) {。

pinMode(segmentPins[i], OUTPUT); }。

}。

void loop() {。

for (int i = 0; i < 10; i++) {。

displayNumber(i);delay(1000);}。

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。

E3最佳答案下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#i nclude<at89x52.h> un sig ned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码void key_delay(void) {int t;for(t=0;t<500;t++);}un sig nedchar k;//设置全局变量k 为键盘的键值键盘延时函数键盘扫描函数 ***************************** *///延时函数voidkeyscan(void)//键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //a 作为缓存 //开始执行行列扫描 {case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd;//使行线 P2.5 为低电平,其余行为高电平a = P2;switch (a)//键盘扫描函数 {unsigned char a;P2 = 0xf0;if(P2!=0xf0){key_delay();if(P2!=0xf0){P2 = 0xfe;key_delay();a = P2;switch (a)case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线 P2.6 为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}} break;}}}}void main(void){while(1){keyscan(); switch(k){case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;**************************** ***主函数 * ********************************** //调用键盘扫描函数 //查找按键对应的数码管显示代码case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case10:P0=Dig[10];break;case11:P0=Dig[11];break;case12:P0=Dig[12];break;case13:P0=Dig[13];break;case14:P0=Dig[14];break;case15:P0=Dig[15];break;default:break; // 退出}}}endWelcome ToDownload !! !欢迎您的下载,资料仅供参考!。

这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么意思望前辈们来看看~~

这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么意思望前辈们来看看~~

这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么意思望前辈们来看看~~#include 'reg51.h'#include 'intrins.h'#include'absacc.h'#include'math.h'typedef unsigned char BYTE;typedef unsigned int WORD;/* LED口地址*/#define led_data XBYTE[0x6000] //写命令BYTE led_w;BYTEled_dm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90};//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf8,8:0x80,9:0x90BYTE di;/*****************LED显示位置********************/void LED_crt(BYTE val) // val与主函数的di对应,di初值等于0则相当于数组取第0位(数码管显示0)//{led_data=led_dm[val];//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5: 0x92,6:0x82,7:0xf8,8:0x80,9:0x90P2 |= 0xff; //p2与1111 1111相或,使p2为1111 1111(此时位选都不亮)P2& = led_w; //p2与led-w的初值1111 0111相与,相当于点亮第四位数码管led_w>>=1; //1111 0111右移一位,变成0111 1011(第3位数码管亮)if (led_w==0x0f) led_w=0xf7; //当led-w==0000 1111时使led-w重新置为1111 0111}void Delay(WORD n){WORD x;while(n--){x=500; while(x--);}}void main(){led_w=0xf7; //led=11110111,第四位数码管点亮di=0;while(1){LED_crt(di); //选取led-dm数组中的值di++;//di自加if(di>0x09) di=0; //当di加到9的时候使di又置0Delay(1000); //延迟,为了使数码管循环能被肉眼清楚看到}}。

怎样用keil编写4位数码管显示1234的程序

怎样用keil编写4位数码管显示1234的程序

怎样用keil编写4位数码管显示1234的程序为了帮助网友解决“怎样用keil编写4位数码管显示1234”相关的问题,中国学网通过互联网对“怎样用keil编写4位数码管显示1234”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:怎样用keil编写4位数码管显示1234的程序,具体解决方案如下:解决方案1:你具体哪一步不会呢。

追问:我就是不懂编程,老师让我们做4位LED数码管动态显示设计,用Keil和protues两个软件回答:keil是汇编软件生成hex文件,然后加载到proteus里面就可以仿真了。

你是不懂代码怎么写呢,还是不会用软件呢追问:两个软件都差不多会用了,就是不会写那个程序,你能不能帮帮我呢?回答:/************************************************************** *************标题:数码管的显示效果:显示1234,从这个例子可以学习多位数码管的动态显示技术*************************************************************** ***************///头文件:#include 'reg51.h'//变量定义:unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共阳数码管 0-9//引脚定义:sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)//函数声明:void delay(void); //延时子函时//主函数,C语言的入口函数:void main(void){unsigned char i=0; //作为查表的索引号while(1) //不停的循环扫描,不扫描则不显示或显示不正确,即为动态显示,{ //数码管显示 1234,可自行修改SMG_q=0; //选择千位数码管P0=table[1]; //查找'1'定义好的数码管段值与P0口输出,显示相应的1delay(); //加入短暂延时P0=0XFF; //清除数码管显示,因是共阳型,所以不是0SMG_q=1; //关闭千位数码管SMG_b=0; //选择百位数码管P0=table[2]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2delay(); //加入短暂延时P0=0XFF; //清除数码管显示,因是共阳型,所以不是0SMG_b=1; //关闭百位数码管SMG_s=0; //选择十位数码管P0=table[3]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2delay(); //加入短暂延时P0=0XFF; //清除数码管显示,因是共阳型,所以不是0SMG_s=1; //关闭十位数码管SMG_g=0; //选择个位数码管P0=table[4]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2delay(); //加入短暂延时P0=0XFF; //清除数码管显示,因是共阳型,所以不是0SMG_g=1; //关闭个位数码管}}//延时子函数,短暂延时void delay(void){unsigned char i=10;while(i--);}追问:额,我在那个Keil软件里就写这个吗?全部都要写吗?回答:恩,不清楚再问我。

显示1234

显示1234

数码管显示1234P0口接数码管字型脚P1口P1.0~P1.3接4个数码管的数位脚#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8];unsigned char data dis_index;void main(){P0 = 0xff;P1 = 0xff;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x17;IE = 0x82;dis_buf[0] = dis_code[0x1];dis_buf[1] = dis_code[0x2];dis_buf[2] = dis_code[0x3];dis_buf[3] = dis_code[0x4];dis_buf[4] = dis_code[0x5];dis_buf[5] = dis_code[0x6];dis_buf[6] = dis_code[0x7];dis_buf[7] = dis_code[0x8];dis_digit = 0xfe;dis_index = 0;TR0 = 1;while(1);}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到P1口用于选通当前数码管的数值, 如等于0xfe时, // 选通P1.0口数码管// dis_buf --- 显于缓冲区基地址{TH0 = 0xFC;TL0 = 0x17;P1 = 0xff; // 先关闭所有数码管P0 = dis_buf[dis_index]; // 显示代码传送到P0口P1 = dis_digit; //dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管if (dis_digit == 0xef)dis_digit = 0xfe;dis_index++; //dis_index &= 0x03; // 4个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}。

四位LED数码管编程

四位LED数码管编程

设计要求:一个基于单片机89S51的可编程定时器的程序,定时器由4个8段数码管显示,可以设置分和秒定时。

可以同时对四路控制对象进行定时控制,外部控件可以用于选择控制对象,设置定时,对定时进行暂停,重置等控制。

#include <AT89X52.H>//宏定义#define uchar unsigned char#define uint unsigned int#define ulong unsigned long int/****************************************************************************** TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; ** TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器** 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时** 间为1ms*65536=65.536ms*******************************************************************************/#define V_TMOD 0x01 //工作方式1#define V_TH0 0x3C //50ms延时常数C=50000//0XDC#define V_TL0 0xB0 //50ms延时常数C=50000 /0X58 //#define V_TH1 0xFF //5ms延时常数C=5000 //0XDC//#define V_TL1 0xFB //5ms延时常数C=5000 /0X58#define V_TH1 0xDC //1ms延时常数C=1000 //0XDC#define V_TL1 0x58 //1ms延时常数C=1000 /0X58#define MAXFUN 6 //功能切换,表示最多的功能状态,sbit k10=P1^0;//sbit BEEP = P3^7; //蜂鸣器驱动线----------------请修改为sbit BEEP =P0^4;uchar bee; //蜂鸣器01开关uchar key; //键顺序吗uchar fun=10; //功能状态, <= MAXFUNuchar it0=0,it1; //Timer0中断计数uchar text=0; //数字//uchar text_ctrl[4]={0xFE,0xFD,0xFB,0xF7}; //位选通值uchar text_ctrl[4]={0xE,0xD,0xB,0x7};//位选通值, 00001110, 00001101, 00001011, 00000111//uchar text_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20,0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效//uchar text_code[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//数码管代码uchar text_code[11]={ 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0,0xFE, 0xF6,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效uchar text_index=0; //当前显示第几个uchar dis_buf[4]; //显示缓存uchar refresh=0; //刷新否T1蜂鸣uchar min=0; //minutesuchar sec=0; //sccondsuchar hour=0; //sccondsuchar onsetup=0;uchar keydown0=0,keydown1=0;uchar data PWM=0xFf ;//PWM值增加,则占空比减小,LED 灯渐暗。

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。

最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档