搜档网
当前位置:搜档网 › PIC的AD转换用LCD和数码管显示

PIC的AD转换用LCD和数码管显示

PIC的AD转换用LCD和数码管显示
PIC的AD转换用LCD和数码管显示

是用PIC16F887单片机写的C程序,供初学者交流参考。

#include //引入头文件

__CONFIG(0x20F1); //设置CHOFIG位,调试用

__CONFIG(0x3FFF);

#define RS RD4 //LCD的引脚的宏定义

#define RW RD5

#define E RD6

void BCD(unsigned int); //BCD转换子程序

void SPI_WRITE(char *); //写一字节命令或数据

void DISP_FOUR(char *); //显示4个数据,最先发的移到最后

char A[4],WW,QW,BW,SW,GW; //万位,千位。。。到个位

const char LED_CODE[11]= //数码管显示代码

{0b11000000, //0

0b11111001, //1

0b10100100, //2

0b10110000, //3

0b10011001,

0b10010010,

0b10000010,

0b11111000,

0b10000000,

0b10010000, //9

0b11111111}; //灭

unsigned int X,Y; // X用于存AD转换结果,Y用于存AD采样通道的电压void delay_us(char); //延时us子程序

void delay_ms(unsigned int ); //延时ms子程序

void write(char m); // 对LCD写数据,子程序

void enable(char m); // 对LCD写的位置,子程序

void disp_init(); //LCD初始化

void CSH(void); //芯片初始化子程序

void main (void)

{

CSH();

disp_init();

while(1)

{ ADCON0=0b01101001; //设置ADCON0为通道10转换,AD模块使能char i ;

for (i=0;i<5;i++) NOP(); //延时20us让保持电容充电

GODONE=1; //AD转换开始

while (GODONE==1); //等待AD转换结束

ADIF=0; //清AD转换结束标志位

X=0;

X=ADRESH<<8; // X用来存AD转换结果

X|=ADRESL;

enable(0x80); //在LCD第一行显示

if((X&0x0200)==0) // 以下为分别判断X的第9位到第0位的状态,然后分别显示到LCD上,如为0则显示0,反之为1则显示1

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0x0100)==0)

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0x0080)==0)

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0X0040)==0)

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0x0020)==0)

{ write(0x30+0);}

else

{write (0x30+1);}

if((X&0x0010)==0)

{ write(0x30+0);}

else

{ write(0X30+1);}

if((X&0x0008)==0)

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0x0004)==0)

{ write(0x30+0);}

else

{ write(0x30+1);}

if((X&0x0002)==0)

{ write(0x30+0);}

else

{ write(0X30+1);}

if((X&0x0001)==0)

{ write(0x30+0);}

else

{ write(0X30+1);} // 以上为LCD显示的10位转换结果

Y=(int)(X/1023*5000); // Y用来存AD采样电压放大1000倍

BCD(Y); // 将Y 转换为BCD然后送去给数码管显示

A[0]=GW; // 最先发的个位移到最后

A[1]=SW;

A[2]=BW;

A[3]=QW;

DISP_FOUR(A); //要根据LED的在板上的实际位置,确定哪个是千位..个位

}

}

void CSH(void)

{ TRISD=0; // D口输出

PORTD=0;

TRISB1=1; // RB1为通道10

ANS10=1; //设为模拟口

ADCON1=0b10000000; // AD结果右对齐

TRISC=0b00010000; // RC3输出(SCK),RC4输入(SDI),RC5输出(SDO)

SSPEN=1; // SPI串口使能

CKP=1; // 空闲时钟为高电平

SSPM3=0;

SSPM2=0;

SSPM1=0;

SSPM0=1; //SPI主控模式,时钟为fosc/16

SMP=1; //在数据输出时间的末端采样输入数据

CKE=0; //在SCK上升沿传输数据

}

void disp_init() //LCD初始化

{

enable(0x02); //光标归零

enable(0x28); //2行显示,5X8点阵,4位数据线

enable(0x01); //清屏,显示清零

enable(0x06); //读或写一个字符后指针加一且光标加一

enable(0x0c); //关显示,显示光标,光标不闪烁

}

void enable(char m) //写命令

{

char H,L;

H=m>>4; // 取高4位

L=m&0x0F; // 取低4位

RS=0; // 写命令

RW=0;

PORTD&=0xF0; // RD口低4位清0

PORTD|=H;

E=0; //数据送入

delay_ms(2);

E=1; // 使能

delay_ms(2);

PORTD&=0xF0; //RD口低4位清0

PORTD|=L;

E=0; //数据送入

delay_ms(2);

E=1;

delay_ms(2);

}

void write(char m ) //写一字节数

{

char H,L;

H=m>>4; // 取高4位

L=m&0x0F; //取低4位

RS=1; //写数据

RW=0;

PORTD&=0xF0; //RD口低4位清0

PORTD|=H; // 读高4位

E=0; //数据写入有效

delay_us(60); // 省去检测是否忙位

E=1; //使能

delay_us(60);

PORTD&=0xF0; // RD口低4位清0

PORTD|=L; // 读低4位

E=0; //读数据结束

delay_us(60);

E=1;

delay_us(60);

}

void SPI_WRITE(char *A)

{ char BUF;

BUF=LED_CODE[*A]; //查显示代码

SSPBUF=BUF; //送出数据

while(BF==0); //等待数据接收完毕BUF=SSPBUF; //空读数据,无用!}

void DISP_FOUR(char *A)

{

SPI_WRITE(A++); //先发个位

SPI_WRITE(A++); //发十位

SPI_WRITE(A++); //发百位

SPI_WRITE(A); //最后发千位

}

void BCD(unsigned int R1)

{

WW=0;QW=0;BW=0;SW=0;GW=0;

while(R1>=10000)

{R1-=10000;WW++;} //万位

while(R1>=1000)

{R1-=1000;QW++;} //千位

while(R1>=100)

{R1-=100;BW++;} //百位

while(R1>=10)

{R1-=10; SW++;} //十位

GW=R1; //个位

}

void delay_ms(unsigned int n) //延时ms子程序{

unsigned int j;

char k;

for (j=0;j

for (k=246;k>0;k--) NOP();

}

void delay_us(char i) //延时us子程序{

char j;

j=i;

while(j>0)

{

j--;

NOP();NOP();NOP();NOP();

}

}

实验三 数码管显示实验

实验十九数码管显示实验 一、实验目的 1、了解数码管的显示原理; 2、掌握数码管显示的编程方法。 二、实验内容 1、编写数码管显示程序,循环显示0-F字符 三、实验设备 1、硬件: JX44B0实验板; PC机; JTAG仿真器; 2、软件: PC机操作系统(WINDOWS 2000); ARM Developer Suite v1.2; Multi-ICE V2.2.5(Build1319); 四、基础知识 1、掌握在ADS集成开发环境中编写和调试程序的基本过程。 2、了解ARM 应用程序的框架结构; 3、了解数码管的显示原理; 五、实验说明 1、LED显示原理 发光二极管数码显示器简称LED显示器。LED显示器具有耗电低、成本低、配置简单灵活、安装方便、耐震动、寿命长等优点,目前广泛应用于各类电子设备之中。 7段LED由7个发光二极管按“日”字排列。所有发光二极管的阳极连接在一起称共阳极接法,阴极连接在一起称为共阴极接法。一般共阴极可以不需要外接电阻。 其中各二极管的排列如上图在共阳极接法中,如果显示数字“5”,需要在a、c、d、f、g端加上高电压,其它加低电压。这样如果按照dp、g、fe、d、c、b、a的顺序排列的话对应的码段是:6DH。其它的字符同理可以得到。

2、数码管显示驱动 数码管的显示一般有动态显示和静态显示两大类,另外按照驱动方式又分串行驱动和并行驱动两种方式。串行驱动主要是提供串-并转换,减少控制线数量;并行驱动对每一个段提供单独的驱动,电路相对简单。这方面参看数字电路相关内容。 下面主要介绍静态显示和动态显示: 1)静态显示: LED数码管采用静态接口时,共阴极或共阳极节点连接在一起地或者接高电平。每个显示位的段选线与一个8位并行口线相连,只要在显示位上的段选位保持段码电平不变,则该位就能保持相应的显示字符。这里的8位并行口可以直接采用并行I/O口,也可以采用串行驱动。相应的电路如下: 很明显采用静态显示方式要求有较多的控制端(并行)或较复杂的电路(串行)。但是在设计中对器件的要求低。

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

DS1302数码管显示程序

/************************************************************************/ // huaqinMCU DS1302 实验程序数码管显示时钟设置说明 // "8键"为时钟设置、时分切换、保存"0键"为加"4键"为减 /************************************************************************/ #include #define uchar unsigned char #define uint unsigned int //===以下IO定义请根据您硬件的连接修改=== sbit T_RST=P3^5;//ds1302-5 sbit T_IO=P3^4;//ds1302-6 sbit T_CLK=P3^6;//ds1302-7 sbit ACC0=ACC^0; sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍 sbit up=P3^1; sbit down=P3^2; sbit set=P3^0; uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg; int hour,mie,sei; uchar clk_time[3]; //秒,分,时寄存器初始值 code uchar ledmap[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //数码管段码 /******************DS1302:写入操作(上升沿)*********************/ void write_byte(uchar da) { uchar i; ACC=da; for(i=8;i>0;i--) { T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC>>1; } } /******************DS1302:读取操作(下降沿)*****************/ uchar read_byte(void) { uchar i;

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序 介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路 多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B 端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路> 2 软件编程 该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:

<51单片机并行口驱动LED数码管显示程序>

数码管显示程序

数码管显示程序 一、程序X1 1、程序X1的功能:最右边的数码管显示“0” 2、程序: ORG 0 LJMP STR ORG 0100H STR: MOV P3, #0FEH ;送最低位有效的位码 MOV P0, #0C0H ;送“0”的段码“0C0H” SJMP STR END 二、程序X2: 用查表方式显示某个显示缓冲器中的数字 1、查表显示的预备知识 设从右到左各显示器对应的显示缓冲器为片内RAM79H~7EH

3、 实例: 例:已知(79H )= 0 7H , 查段码表在最右边的数码管显示79H 中的 “7”; 注:共阳极的段码表: TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH 若:(A )= 0XH 则数字“X ”对应的段码在段码表中的表地址 = TAB + X ORG 0 LJMP STR ORG 0100H ① 各显示器与显示缓冲器地址对应关系 显示缓冲器: 7EH 7DH 7CH 7BH 7AH 79H 对应显示 器: ② 显示缓冲器的值与显示数字的关系: 显示缓冲器中的值 对应段码表地址 显示的数字 0XH 表首址+OXH X

STR: MOV P3, #11111110B ;送最低位有效的位码 MOV 79H , #07H ;送要显示的数据到显示缓冲器 MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0) SJMP STR TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END 例2:. 查段码表在最右边的数码管循环显示“0”~“F” ORG 0 LJMP STR ORG 0100H STR: MOV P3, #11111110B ;送最低位有效的位码 LP0: MOV 79H , #0H ;送要显示的数据的初值到显示缓冲器MOV R3 , #6 ; 送要显示的数据的个数 LP: MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)

数码管显示

数码管显示 第3讲数码管显示 第3讲数码管显示 一、数码管显示原理 我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如下。 其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。 数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。如下图。

二、点亮一个数码管 下面以七段共阴数码管为例讲述如何点亮一个数码管。 l 51系列单片机的P0口没有上拉电阻(其他端口有),所以如果直接接数码管的段选线,那么不能将其点亮。我们需要为其加上220欧姆的上拉电阻,注意,上拉电阻阻值不能过大。实验原理图如下。 其中,7SEG-COM-CAT-GRN为七段共阴数码管,显示为绿色。RES为电阻。查找电阻时,需要选中下面的Resistors,如下图。

单片机原理数码管动态显示实验-单片机原理-实验报告

宁德师范学院计算机系 实验报告 (2014— 2015学年 第2学期) 实验名称 数码管动态显示实验 业计算机科学与技术(非师范) 2012 指导教师 实验日期学号 B47 姓名 王秋 课程名称 单片机原理 杨烈君

实验目的: 实验要求: 1. 在Proteus 软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加八位 7段数码管(共阳/共阴自选),将P2 口作数据输出口与 7段数码管数据 引脚相连,P3引脚输出位选控制信号 实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒 扩展要求: 结合LED 显示,实现带数码显示的交通灯 实验设备(环境): 1 .计算机 2. Proteus ISIS 7 Professional 3. Keil 应用程序 实验内容: 数码管动态显示技术要求实现: 1?动态显示法,实现数码管分别显示数字 1-8 ; 2 ?实现指定数值的显示 (可使用缓存数值) (); 3 .实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒; 4 ?实现时钟的自动计时; 扩展要求: 结合LED 显示,实现带数码显示的交通灯; 1. 巩固Proteus 软件和Keil 软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握7段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序的设计 3. 在Keil 软件中编写程序,采用动态显示法,实现数码管分别显示数字 1-8 4. 实现指定数值的显示 (可使用缓存数值) 5. 6. 实现时钟的自动计时 7. 应用程序

实验步骤、实验结果及分析: 1实验步骤: 1、使用Proteus ISIS 7 Professional 应用程序,建立一个.DSN文件 2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51CAPCA P-ELEC CRYSTAL RES PACK-8 3、构建仿真电路: 连接图 显示1-8 显示

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

51单片机(四位数码管的显示)程序 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。 最佳答案 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #include unsigned char code Dig[]={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)

四位数码管的显示程序

大家可以参考下: 我也没调试过大家有问题可以给我留言我的邮箱zhangyi061322@https://www.sodocs.net/doc/ab3533092.html, 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。 最佳答案 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #include unsigned char code Dig[]={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为低电平,其余行为高电平

DSB 单片机数码管显示原理图和程序

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。 主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。 先上原理图: 洞洞板布局图: 然后就是实物图了:

附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。 #include eg52.h #define uchar unsigned char #define uint unsigned int sbit DQ=P3^4; //温度数据口 sbit wx1=P2^0; //位选1 sbit wx2=P2^1; //位选2 sbit wx3=P2^2; //位选3 sbit wx4=P2^3; //位选4

unsigned int temp, temp1,temp2, xs; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6}; /******延时程序*******/ void delay1(unsigned int m) { unsigned int i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } void delay(unsigned int m) //温度延时程序 { while(m--); } void Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位ds18b20通信端口 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时大于480us DQ = 1; //拉高总线 delay(4); x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20); } /***********ds18b20读一个字节**************/ uchar ReadOneChar() {

双位数码管显示

前言 《单片机应用技术》是自动化类专业一门理论较深.实践较强的主干综合专业课,该课程包括检测转换技术,微控技术和可编程控制技术等三大部分。检测与转换技术主要是实现物理量检测并将被检测的物理量转换成计数机或plc能识别的有效信号,作为控制系统的感知部分。而微机控制技术和可编程控制技术则在接收感知系统传来的信号技术基础上,根据执行机构的动作要求进行程序编制,形成控制信号,从而驱动动力系统进行各种操作。 单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。

原理图

程序说明 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,h"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

51单片机数码管显示时钟程序

#include<> //#include#include<> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P3^5; ~ sbit key3=P3^6; sbit beep=P2^3; unsigned code table[]={ 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c, 0x39 , 0x5e , 0x79 , 0x71 }; : uchar num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi; uchar ns,ns1,nf,nf1,numns,numnf; void delay(uint z); void keyscan (); void keyscan1 (); void alram(); void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1); void display0(uchar nf,uchar nf1,uchar ns,uchar ns1); 。 void main() { TMOD=0x01;//设定定时器0工作方式1 TH0=(65536-46080)/256 ; TL0=(65536-46080)%256 ; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0中断 、 numns=12; numnf=0; while(1) { if(dingshi==0) { keyscan ();

PLC控制数码管显示程序设计

《PLC控制数码管显示程序设计》 学院名称:信息工程学院 专业名称:电气自动化技术 班级名称:电气1204班 姓名:赵传锋 学号:1205130425 指导教师:汪清平 完成时间:2014年 06 月 01日

摘要 数码管显示是一个典型的PIC教学项目。在交通灯、电梯、抢答器等系统的控制中都融入了数码管显示。 本设计就是利用PLC作为核心部件用对数码管显示进行设计,让学生在学习过程中更熟练地掌握PIC的编程技巧,提高编程能力。 利用PLC控制数码管的显示过程,并且给出了接线图、梯形图。 关键词:PLC;编程设计;接线图:梯形图

一、系统组成 1.设计要求: 先按下“开”按钮,再按“循环显示”按钮,数码管就会从0~9循环显示。按下“置数”按钮,数码管实时显示8、4、2、1编码开关所置数值。用“循环显示”和“置数”按钮来切换数码管的循环显示和置数状态。 2.系统组成及工作原理: 系统由plc硬件系统和梯形图程序组成。 PLC的控制方式是由继电器控制方式演化而来,由PLC内部的微电子电路构成的软元件线圈和触点取代了硬件继电器的线圈和触点,用PLC的程序指令取代继电器控制的连接导线,将各个元件按照一定的逻辑关系连接起来,PLC内部的中央控制器(CPU)根据输入条件和预定的程序,控制各个软元件的状态,并输出到外部执行部件,控制设备运行。 3.硬件原理图:

4.程序流程图:

二、系统设计 设计可以分为循环模式与置数模式的切换控制部分、循环与置数控制部分和输出部分三大模块。 1.输出部分: 定义: 编码部分中间继电器的常开触点接法: 将Mxx中低位数字相同的中间继电器的常开触点并联接到一起; 输出的接法: Y000接a段、Y001接b段、Y002接c段、Y003接d段、 Y004接e段、Y005接f段、Y006接g段、Y007接dot段。 工作过程:当编码部分中的某一组工作时,该组中的中间继电器相应的常开触点闭合,从而使相对应的Y00x有输出,这样与输出相连的段就发亮,并组合形成数字。

七段数码管显示程序

附录A 八位七段数码管显示程序 library ieee; use led is port( clk : in std_logic; --Clock Signal data_in : in std_logic_vector(7 downto 0); --data bus ledag : out std_logic_vector(6 downto 0); --定义七位输出信号 sel : out std_logic_vector(2 downto 0) --ledag Select ); end led; -------------------------------------------------------------------- architecture behave of led is signal dcount : std_logic_vector(2 downto 0); signal adh,adl : std_logic_vector(6 downto 0); signal adcount : std_logic_vector(7 downto 0); signal din_h,din_l : std_logic_vector(3 downto 0); signal coclk : std_logic; begin process(clk) --out enable signal begin if(clk'event and clk='1') then if adcount="" then coclk<='1';

adcount<="00000000"; else adcount<=adcount+1; coclk<='0'; end if; end if; end process; process(clk) --rd the adc data begin if(clk'event and clk='1') then din_h<=data_in(7 downto 4); din_l<=data_in(3 downto 0); end if; end process; process(clk) begin case din_h is when "0000"=>adh<="0111111"; --display 0 when "0001"=>adh<="0000110"; --display 1 when "0010"=>adh<="1011011"; --display 2 when "0011"=>adh<="1001111"; --display 3 when "0100"=>adh<="1100110"; --display 4 when "0101"=>adh<="1101101"; --display 5 when "0110"=>adh<="1111101"; --display 6 when "0111"=>adh<="0000111"; --display 7

嵌入式系统数码管显示程序

#include //#include "math.h" #define uchar unsigned char #define ulong unsigned long #define uint unsigned int #define ufloat unsigned float #define dxuan P1 uchar code num_to_char[]={0x09,0x9f,0x2a,0x1a,0x9c,0x58,0x48,0x1f,0x08,0x18}; //小旭段码 //uchar code num_to_char[]={0x01,0x9f,0x22,0x06,0x9c,0x44,0x40,0x1f,0x00,0x04}; //0-9段码我的段码 //uchar code num_to_char[]={0x80,0xe3,0x44,0x41,0x23,0x11,0x10,0xc3,0x00,0x01}; //ck段码 //uchar code num_to_char[]={0x40,0xed,0x90,0xa0,0x25,0x22,0x02,0xe4,0x00,0x20}; //夏俊段码 //uchar code num_to_char[]={0x80,0xf1,0x44,0x60,0x31,0x22,0x02,0xf0,0x00,0x20}; //吉吉段码 uchar x,y,z; float freq; sbit ds1=P3^7; //ds1数码管位选 sbit ds2=P3^3; //ds2数码管位选 sbit ds3=P3^5; //ds3数码管位选 uchar flag=0; uchar T0count,timecount; /*1MS为单位的延时程序*/ void delay_1ms(char x) { char j; while(x--){ for(j=0;j<125;j++) {;} } } void main() { uchar x,y,z,i; TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1 TH0=0; TL0=0; TH1=(65536-50000)/256; TL1=(65536-50000)%256; //定时时间为10ms TR0=1; //计数器0开始运行

plc数码管显示控制

题目数码管显示空控制实验 内容及要求 编好控制系统电路原理图和梯形图并通过实验。写出课程设计报告。 用FX1N-40MR-001型PLC实现数码管显示控制。 先按下“开”按钮,再按“循环显示”按钮,数码管就会从0~9循环显示。按下“置数”按钮,数码管实时显示8、4、2、1编码开关所置数值。用“循环显示”和“置数”按钮来切换数码管的循环显示和置数状态。 进度安排: 7月1号到图书馆和网上查找相关资料。 7月2号到F楼 212 室连接实验电路并编写梯形图。 7月3号调试程序,找出不足,并修正。 7月4号编写课程设计报告。 学生姓名: 指导时间 2011年7月2日星期六指导地点:F楼 212 室任务下达2011年6月 30日任务完成2011年 7 月 4 日 考核方式 1.评阅□ 2.答辩□ 3.实际操作□ 4.其它□ 指导教师系(部)主任

摘要 数码管显示是一个典型的PIE教学项目。在交通灯、电梯、抢答器等系统的控制中都融入了数码管显示。本设计就是利用PLC作为核心部件用对数码管显示进行设计,让学生在学习过程中更熟练地掌握PIE的编程技巧,提高编程能力。 利用PLC控制数码管的显示过程,并且给出了接线图、梯形图。 关键词:PLC;编程设计;接线图:梯形图 目录 前言 (5) 一、系统组成 (6) 1.设计要求 (6) 2.系统组成及工作原理 (6) 3.硬件原理图 (7)

4.程序流程图 (7) 二.系统设计 (8) 1.输出部分 (8) 2.模式切换控制部分 (11) 3.循环控制与置数控制部分 (12) 4.调试过程问题分析 (17) 三、结论 (18) 四.参考文献 (19) 五.附录 (19)

单片机数码管显示程序

#include #include #include #define uchar unsigned char #define uint unsigned int uint AD_DATE; sbit LE1=P2^0; //位选573锁存器使能 sbit LE2=P2^1; //段选573锁存器使能 uchar code dis[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, // 0 1 2 3 4 5 6 7 0x7F,0x6F}; // 8 9 void delay(uint time) //int型数据为16位,所以最大值为65535 { uint i,j; //定义变量i,j,用于循环语句 for(i=0;i

51单片机静态数码管显示数字程序

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推 //1111111111111111111111111111111111111111111111111111111111111111111 //1111111111111111111111111111111111111111111111111111111111111111111 /****************************************************************************** * * 实验名: 静态数码管实验 * 使用的IO : 数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3 * 实验效果: 按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按下K4键, *显示加1。 * 注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验 *效果,最好把红外线先取下来。 ******************************************************************************* / #include #include #define GPIO_DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值 void Delay10ms(); //延时10ms /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无

数码管动态显示c语言程序

//这是一个,四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止#include unsigned char code LED[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; unsigned char LEDbuff[]={0xff,0xff,0xff,0xff}; //定义数码管的位选段 sbit SEG_bit_1 = P0^1; sbit SEG_bit_2 = P0^2; sbit SEG_bit_3 = P0^3; sbit SEG_bit_4 = P0^4; unsignedintcnt=0; unsignedint sec =0; unsigned char i=0; void main() { TMOD=0x01; /*设置定时器*/ TH0=0xfc; TL0=0x18; TR0=1; EA=1; /*设置中断*/ ET0=1; while(1) { if(0==TF0) { if(cnt>=1000) { cnt=0; sec++; LEDbuff[0]=LED[sec%10]; /*设置数码管显示位*/ LEDbuff[1]=LED[sec/10%10]; LEDbuff[2]=LED[sec/100%10]; LEDbuff[3]=LED[sec/1000%10]; } } } } void interrupttimer0() interrupt 1 /*设置中断函数*/

{ TH0=0xfc; TL0=0x18; cnt++; P1=0xff; switch(i) { case 0: SEG_bit_1 = 1;SEG_bit_4 = 0;P1=LEDbuff[0];i++;break; case 1: SEG_bit_4 = 1;SEG_bit_3 = 0;P1=LEDbuff[1];i++;break; case 2: SEG_bit_3 = 1;SEG_bit_2 = 0;P1=LEDbuff[2];i++;break; case 3: SEG_bit_2 = 1;SEG_bit_1 = 0;P1=LEDbuff[3];i=0;break; default:break; } }

项目一数码管显示

项目一数码的显示 3.1 任务描述 (a)外形图(b)电压表(c)温度表 图3-1 数码管的外形如图3-1(a)所示,在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等等,如图3-1(b)(c)所示,具有醒目、直观的优点。 数码管的数字显示部分由7个条形发光管组成“8”字形构成的,加上点形发光二极管的小数点就是8个。这些段分别用字母a、b、c、d、e、f、g、h来表示,如图3-2所示。 h 图3-2数码管的数字显示 数码管的每个字段都可以选择亮或者不亮。如果要显示“2”,那么应当是a亮b亮g 亮e亮d亮f不亮c不亮h不亮。 数码管内半导体的主要成分为磷化镓、磷砷化镓等,用来产生红色、绿色(磷化镓中掺入氮等杂质)等颜色的显示。它的工作电压和功耗都比较低,能直接与TTL/MOS集成电路配合使用,受温度变化的影响小,使用寿命长,坚固牢靠。 用单片机控制LED数码管显示数字,实现方式简单,性能稳定可靠,可以同时显示多位数字。 任务1:用4个数码管显示“2010” 任务2:显示“0~9”10个数字 任务3:显示“00~30”31个数字 3.2 LED数码管简介 1、内部结构 数码管由八个发光二极管组成,根据发光二极管单元连接方式分为共阳极数码管和共阴极数码管,如图3-3所示。

a b c d e f g h (a )共阴极数码管 (b) 共阳极数码管 图3-3 数码管的分类 共阳极数码管是八个发光二极管的阳极连接在一起,共阳数码管在应用时应将公共极COM 接到+5V ,当某一字段发光二极管的阴极为低电平时,相应字段就点亮;共阴极数码管是八个发光二极管的阴极连接在一起共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 2.管脚图 数码管的管脚排列如3-4所示,GND 为公共端。 图3-4 数码管的管脚排列图 8.测量数码管引脚,并区分共阴和共阳 首先,我们找个电源(3到5伏)和1个1K Ω(几百欧的也行)的电阻,VCC 串接个电阻后和GND 接在任意2个脚上,组合有很多,但总有一个LED 会发光的,找到一个就够了,然后GND 不动,VCC (串电阻)逐个碰剩下的脚,如果有LED 亮,那它就是共阴的了。相反用VCC 不动,GND 逐个碰剩下的脚,如果有LED 亮,那它就是共阳的,然后逐个点亮LED ,确定其他管脚。 如果有数字万用表.,可以直接用,把功能放在电阻档,红表笔是电源的正极,黑表笔是电源的负极。 3.3 静态显示 任务1:静态显示“2010” 静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别与一个8位I/O 口地址相连,I/O 口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O 口输出新的段码。 采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU 时间少,编程简单,显示便于监测和控制,但其占用的口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。

相关主题