adc0808的c语言编程51,51单片机驱动ADC0808电路图C51及汇编程序

这两天刚刚完成了一个用C编写的程序,这是我第一个用C语言编写的程序,并且调试成功。

第一个C程序,值得纪念,也值得以后参考。

本程序的功能是:

1.ADC0808转换功能;

2.数据16进制显示;

3.串行通信数据。

#include

#include

#define uchar unsigned char

#define uint  unsigned int

sbit START=P3^6;  //启动转换

sbit OE=P3^5;     //输出允许

sbit EOC=P3^7;    //转换结束

sbit WC=P3^4;     //通道选择

sbit WB=P3^3;     //通道选择

sbit WA=P3^2;     //通道选择

uchar data  led[12];

signed data  data1;

signed data  data2;

signed data  data3;

signed data  data4;

signed data  data5;

signed data  data6;

signed data  data7;

uchar code  tv[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb};

uchar code  dc[]={0xC0,  //"0"

0xF9,  //"1"

0xA4,  //"2"

0xB0,  //"3"

0x99,  //"4"

0x92,  //"5"

0x82,  //"6"

0xF8,  //"7"

0x80,  //"8"

0x90,  //"9"

0x88,  //"A"

0x83,  //"B"

0xC6,  //"C"

0xA1,  //"D"

0x86,  //"E"

0x8E,  };//"F"};/十六进制显示方式

void delay(void)                      //延时程序

{

uint i;

for(i=0;i<10;i++);

}

void ledxianshi(void)       //显示模块

{

uchar k,i;

led[0]=data1%16;        //编码1个位

led[1]=data1/16%16;     //编码1十位

led[2]=data2%16;        //数据1个位

led[3]=data2/16%16;     //数据1十位

led[4]=data3%16;        //编码2个位

led[5]=data3/16%16;     //编码2十位

led[6]=data4%16;        //数据2个位

led[7]=data4/16%16;     //数据2十位

led[8]=data5%16;        //编码3个位

led[9]=data5/16%16;     //编码3十位

led[10]=data6%16;        //数据3个位

led[11]=data6/16%16;     //数据3十位

for(k=0;k<12;k++)

{

P2=tv[k];  //位选用

i=led[k];

P1=dc[i];  //段码数显示

delay();

}

}

void csh(void)

{

SM0=0;

SM1=1;

REN=1;

TI=0;

RI=0;

PCON=0;

TH1=0xF3;

TL1=0XF3;

TMOD=0X20;

EA=1;

ET1=0;

ES=1;

TR1=1;

TI=0;

SBUF=data1;

while(!TI);

TI=0;

SBUF=data2;

while(!TI);

TI=0;

SBUF=data3;

while(!TI);

TI=0;

SBUF=data4;

while(!TI);

TI=0;

SBUF=data5;

while(!TI);

TI=0;

SBUF=data6;

while(!TI);

TI=0;

}

void ad1(void)

{

WA=0;            //通道1

WB=0;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data7=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void ad2(void)

{

WA=1;            //通道1

WB=0;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data4=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void ad3(void)

{

WA=0;            //通道1

WB=1;

WC=0;

START=1;

START=0;          //启动转换

while(EOC==0);    //转换结束信号,为0则说明转换结束

OE=1;             //输出允许信号,为真,可以输出

data6=P0;       //P0口的测量值送到TVDATE

OE=0;             //关输出允许

}

void main(void)

{

data1=0X01;

data3=0X02;

data5=0X03;

ad1();

ad2();

ad3();

loop:

ledxianshi();

ad1();

if ((data7-data2)>0)

{

data2=data7;

ad2();

ad3();

csh();

goto loop ;

}

else

goto loop ;

}

----------------------------------------------------------------------------------

A51汇编程序:

;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA1    DATA    60H

DATA2    DATA    61H

DATA3    DATA    62H

DATA4    DATA    63H

DATA5    DATA    64H

DATA6    DATA    65H

DATA7    DATA    66H

DATA8    DATA    67H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LDATA    DATA    54H

;;;;;;;;;;;;;;;;;;;;;;;

EOC BIT P3.7            ;接口定义

ST  BIT P3.6

OE  BIT P3.5

WC  BIT P3.4

WB  BIT P3.3

WA  BIT P3.2

K1  BIT P2.4

K2  BIT P2.5

K3  BIT P2.6

K4  BIT P2.7

ORG 0000H

AJMP SEND

ORG 0030H

SEND:     MOV   TMOD,#20H            ;串口初始化

MOV   TH1,#0F3H            ;传输波特率2400

MOV   TL1,#0F3H

MOV   SCON,#50H

MOV   PCON,#00H

SETB  TR1

MOV DATA1,#01H             ;识别码定义,每个识别码对应一个数据

MOV DATA3,#02H

MOV DATA5,#03H

LP1: CLR WB   ;AD口选择:000位通道0数据

CLR WA

CLR WC

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA2,P0    ;将临时存储器上的数据送给数据1

LP2: CLR WC          ;AD口选择:001位通道1数据

CLR WB

SETB WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA4,P0    ;将检测的数据送给数据2

CLR OE

LP3: CLR WC          ;AD口选择:010位通道2数据

SETB WB

CLR WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV DATA6,P0    ;将检测的数据送给数据3

CLR OE

LCALL TT0       ;调用串口数据传输程序

LP:  LCALL LEDSHOW   ;调用显示程序

CLR WC

CLR WB

CLR WA

CLR  ST

SETB ST

CLR  ST

JNB EOC,$

SETB OE

MOV LDATA,P0    ;将通道0的检测数据送送给临时存储器

CLR OE

MOV A,LDATA

CJNE A,DATA2,DADA    ;数据1不等于临时数据,跳转到数据比较,

AJMP LP              ;如果相等,执行这条指令;

DADA:JC XIXI              ;临时数据小于数据1,跳转到小值指令;

AJMP LP1             ;临时数据大于数据1,跳到重新判断三个数据值

XIXI:AJMP LP              ;数据1小于临时数据,执行这条指令,继续判断;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TT0:      MOV SBUF,DATA1 ;编码1送入串口SBUF

SENT0:    JBC TI,SENWT1  ;判断发送是否完成,完成则跳到SENWT1,没有完成,执行下一条指令

LCALL LEDSHOW  ;调用数据显示程序

SJMP SENT0     ;返回继续检测发送完成指令

SENWT1:   CLR TI         ;关闭发送

MOV SBUF ,DATA2;将数据1送入串口SBUF

SENWT2:   JBC TI,SENWT3  ;判断发送是否完成,完成则跳到SENWT3,没有完成,执行下一条指令

LCALL LEDSHOW  ;

AJMP SENWT2    ;返回继续检测发送完成指令

SENWT3:   CLR TI         ;关闭发送

;以下程序相同功能,发送另外两组数据

TT0_2:    MOV SBUF,DATA3 ;

SENT0_2:  JBC TI,SENWT1_2;

LCALL LEDSHOW  ;

SJMP SENT0_2   ;

SENWT1_2: CLR TI         ;

MOV SBUF ,DATA4;

SENWT2_2: JBC TI,SENWT3_2;

LCALL LEDSHOW  ;

AJMP SENWT2_2  ;

SENWT3_2: CLR TI         ;

;

TT0_3:    MOV SBUF,DATA5 ;

SENT0_3:  JBC TI,SENWT1_3;

LCALL LEDSHOW  ;

SJMP SENT0_3   ;

SENWT1_3: CLR TI         ;

MOV SBUF ,DATA6;

SENWT2_3: JBC TI,SENWT3_3;

LCALL LEDSHOW  ;

AJMP SENWT2_3  ;

SENWT3_3: CLR TI         ;

RET            ;数据发送完成,退出子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;数据显示

LEDSHOW:  MOV R1,#60H

MOV P2,#0F0H

LEDSHOW_1:

MOV A,@R1

MOV B,#16

DIV AB

LCALL LED

INC P2

MOV A,B

LCALL LED

INC P2

INC R1

MOV A,R1

CJNE A,#66H,LEDSHOW_1

RET

;;;;;;;;;;;;;;数码管显示

LED:  MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

LCALL DELAY1

RET

TABLE:

DB  0C0H        ;"0"

DB  0F9H        ;"1"

DB  0A4H        ;"2"

DB  0B0H        ;"3"

DB   99H        ;"4"

DB   92H        ;"5"

DB   82H        ;"6"

DB  0F8H        ;"7"

DB   80H        ;"8"

DB   90H        ;"9"

DB  0C8H        ;"A"

DB  083H        ;"B"

DB  0C6H        ;"C"

DB  0A1H        ;"D"

DB  086H        ;"E"

DB  08EH        ;"F"

DB  0BFH        ;"-"

DELAY1:

MOV R7,#10

L1:    MOV R6,#50

DJNZ R6,$

DJNZ R7,L1

RET

DELAY:

MOV R5,#250

D1:    MOV R6,#200

D2:    DJNZ R6,D2

DJNZ R5,D1

RET

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式贪婪与非贪婪模式

正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式&#xff0c;今天用的时候就想不起来了&#xff0c;现在这里总结一下&#xff0c;以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如&#xff1a;String str"abcaxc"…

使用jOOQ DSL

本文是我们学院课程的一部分&#xff0c;标题为jOOQ –类型安全的数据库查询 。 在SQL和特定关系数据库很重要的Java应用程序中&#xff0c;jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多&#xff0c;JDBC过多时&#xff0c;这是一种替代方法。 它显示了一种现代的领域特…

[Noip模拟赛] Power

POWER 源程序名 POWER.??? (PAS,C,CPP) 可执行文件名 POWER.EXE 输入文件名 POWER.IN 输出文件名 POWER.OUT 多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。 多瑞卡每晚到早晨5点钟都在晚会上&a…

如何玩转CSS列表样式?速查!

目录 CSS 列表 列表 不同的列表项标记 作为列表项标记的图像 浏览器兼容性解决方案 列表 -简写属性

linux逆向工程反汇编,Kali Linux 逆向工程工具 Jad 教程

日期&#xff1a;2017年12月21日观看&#xff1a; 1,895 C 次用法&#xff1a;jad [option(s)] jad [选项(s)] 选项&#xff1a;-a - 生成JVM指令作为注释(注释)-af - 注释时输出完全限定的名称-b - 生成冗余大括号(大括号)-clear - 清除所有的前缀&#xff0c;包括默认的前缀-…

任意文件读取及删除漏洞

任意文件读取漏洞及危害 通过提交专门设计的输入&#xff0c;攻击者就可以在被访问的文件系统中读取或写入任意内容&#xff0c;往往能够使攻击者从服务器上获取敏感信息文件&#xff0c;正常读取的文件没有经过校验或者不严格&#xff0c;用户可以控制这个变量读取任意文件。…

restful web_RESTful Web服务可发现性,第4部分

restful web这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第四篇 。 本文将重点介绍REST API&#xff0c;HATEOAS的可发现性以及由测试驱动的实际方案。 引入REST可发现性 API的可发现性是一个值得引起足够关注的…

微信小程序微信支付安卓手机可以,苹果手机支付失败。

问题截图: 解决办法有3种可能性,请按照对应的情况排查: 1.wx.request 无法发起网络请求,提示没有权限,域名已经配置过了,证书检测也是正确没问题的? 测试ios和安卓,假如有一方可以,一方不行,则是证书问题,请选用受认可的证书 检测地址:https://www.qcloud.co…

面试知识点总结01

1.Android 版本Bug 想必使用过 Android 5.0.1 系统的用户对内存泄露 bug 不会感到陌生&#xff0c;此缺陷不仅会导致内存占用过高&#xff0c;还会进而致使应用及其后台进程被强制关闭&#xff0c;甚至是系统界面崩溃等。 内存泄露 信息泄露 流量泄露 2.ArrayList 和LinkList的…

安装linux无驱动黑屏,ubuntu16.04安装黑屏与显卡安装笔记

本帖最后由 zhengchao666 于 2016-4-26 16:08 编辑ubuntu安装时黑屏处理问题描述&#xff1a;ubuntu使用光盘/USB安装时&#xff0c;出现"install ubuntu/ try ubuntu without installation"选择&#xff0c;但是Enter安装时&#xff0c;显示器显示没有信息&#xff…

从JS敏感信息泄露到GETSHELL

前言 小弟新手&#xff0c;大佬勿喷&#xff0c;文章有何不妥&#xff0c;还望大佬们斧正。 正文 前端时间打HW&#xff0c;拿到一个IP&#xff0c;先在FOFA上搜一下 发现这个IP现在开放了三个端口&#xff0c;分别是86&#xff0c;83&#xff0c;82对应不同的后台管理系统 …

HashMap两种遍历数据的方式

HashMap的遍历有两种方式&#xff0c;一种是entrySet的方式&#xff0c;另外一种是keySet的方式。 第一种利用entrySet的方式&#xff1a; Map map new HashMap(); Iterator iter map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry (Map.Entry) iter.ne…

jOOQ类型安全数据库查询教程

课程大纲 SQL是用于关系数据库查询的功能强大且表达能力强的语言。 SQL已建立&#xff0c;标准化并且几乎不受其他查询语言的挑战。 但是&#xff0c;在Java生态系统中&#xff0c;自从JDBC以来&#xff0c;几乎没有采取任何相关的措施来更好地将SQL集成到Java中。 在更高级别上…

中专计算机专业学c语言吗,中专计算机专业学什么 有哪些课程

计算机原理、计算机应用基础、计算机网络基础、CAD辅助设计、三维动画设计、VBSIC语言及程序设计PHOTOSHOP、Windows、网页设计、Office办公自动化、多媒体、计算机系统安装及维护管理、计算机病毒原理防范等。计算机专业就业前景计算机专业就业前景很好。随着现代经济和科技的…

教你玩转CSS表格(table)

目录 表格边框 折叠边框 表格宽度和高度 表格文字对齐 表格填充 表格颜色 表格边框 指定CSS表格边框,使用border属性。 下面的例子指定了一个表格的Th和TD元素的黑色边框: table, th, td {border: 1px solid black;}

实战|全程分析js到getshell

本篇转载于https://forum.butian.net/share/260 看到望海师傅的山理证书真滴好看&#xff0c;真想搞一本&#xff0c;刚刚入edusrc的时候收集了一波山理的子域资产&#xff0c;全部看了一遍都被大佬挖的干干净净了。没有内网VPN基本上挖不到&#xff0c;然后我就去公众号看了一…

教你吃透CSS的盒子模型(Box Model)

目录 CSS 盒子模型(Box Model) 元素的宽度和高度 浏览器的兼容性问题 CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,”box model”这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容…

多家防火墙设备存在信息泄露漏洞

概述 漏洞名称多家防火墙设备存在信息泄露漏洞安全通告发布日期2021-06-16受影响产品及版本胜鑫塔下一代防火墙XT6000-A-FW-1.0.0-0-2778 利谱第二代防火墙6164-1.5.2 任子行下一代防火墙SURF-NGSA-V-3000 中科网威下一代防火墙F6600L-1.5.2 任子行网络安全审计系统内置报表 网…

c语言 linker error,[Linker error] undefined reference to `prinf'的问题!

[Linker error] undefined reference to prinf的问题&#xff01;环境为dev-cpp日志如下&#xff1a;编译器: Default compiler执行 gcc.exe...gcc.exe "E:\C\ran.c" -o "E:\C\ran.exe" -I"D:\Dev-Cpp\include" -L"D:\Dev-Cpp\lib"C:\…

独处可以激发思考的力量

如果你知道怎么独处的话&#xff0c;成大事者都是善于独处的人&#xff0d;&#xff0d;在独处的过程中激发思考的力量。 自卑可以像一座大山把人压倒并让你永远沉默&#xff0c;也可以像推进器产生强大的动力。 比别人先走一步&#xff0c;能创造一种成功的心境。 在独处时&am…