//主程序

#include"LCD12864.h"

//精度要根据你的基准电压/1024来计算出来!要注意

#define TLCPER 0.00421

uchar code Tlc_Table[]="0123456789";

uchar Tlc_Display[]="0.0000 V";

extern uint Tlc1549(void);

void GetDisplayVoltage()

{

uchar a,b,c,d,e;

uint tmp;

unsigned long value;

tmp = Tlc1549();                                 //sampling

value = tmp * (TLCPER * 10000) ;  //放大10000倍,48~50000

a = (value / 10000) % 10;

b = (value / 1000) % 10;

c = (value / 100) % 10;

d = (value / 10) % 10;

e = value % 10;

Tlc_Display[0]=Tlc_Table[a];

Tlc_Display[2]=Tlc_Table[b];

Tlc_Display[3]=Tlc_Table[c];

Tlc_Display[4]=Tlc_Table[d];

Tlc_Display[5]=Tlc_Table[e];

}

void main()

{

Delay400Ms();  //启动等待,等LCD讲入工作状态

LCDInit();        //LCM初始化

while(1){

GetDisplayVoltage();

DisplayListChar(0,1,Tlc_Display);

}

}

//汇编语言源程序

NAME TLC1549

TLC_SCL BIT P1.7 //TLC1549引脚定义

TLC_SDA BIT P1.6

TLC_CS  BIT P1.5

?PR?Tlc1549?TLC1549  SEGMENT CODE

?DT?Tlc1549?TLC1549  SEGMENT DATA OVERLAYABLE

PUBLIC Tlc1549

RSEG  ?DT?Tlc1549?TLC1549

?Tlc1549?BYTE:

temp?040:   DS   2

RSEG  ?PR?Tlc1549?TLC1549

Tlc1549:

USING 0

; {

PUSH PSW

MOV R5,#10              ;ten clock for ready work

SETB TLC_CS

CLR  TLC_SCL

NOP

NOP

READY:

SETB TLC_SCL

NOP

NOP

CLR  TLC_SCL

DJNZ R5,READY

CLR  TLC_CS

NOP

NOP

SETB TLC_CS

MOV  A,#0

CLR  EA       ;stop break

CLR  TLC_CS

NOP

NOP

SETB TLC_SCL

CLR  C       ;get first two bit

MOV  C,TLC_SDA                    ;get first MSB

RLC  A

CLR  TLC_SCL

NOP

CLR  C

SETB TLC_SCL

MOV  C,TLC_SDA                  ;get secondary MSB

RLC  A

MOV  temp?040,A                  ;get two MSB

CLR  TLC_SCL

MOV  R5,#8                            ;get last eight bit

MOV A,#0

LOWBIT:

SETB TLC_SCL

CLR C

MOV C,TLC_SDA

RLC A

CLR TLC_SCL

DJNZ R5,LOWBIT

MOV temp?040+01H,A       ;gain last eight bit

MOV  R6,temp?040

MOV  R7,temp?040+01H

; }   ; SOURCE LINE # 7

?C0001:

POP PSW

SETB EA                               ;allow break

RET

; END OF Tlc1549

END

//LCD12864.c

#include"LCD12864.h"

//写数据

void WriteDataLCD(uchar WDLCD)

{

ReadStatusLCD(); //检测忙

LCD_RS = 1;

LCD_RW = 0;

LCD_Data = WDLCD;

LCD_E = 1;

LCD_E = 1;

LCD_E = 1;

LCD_E = 0;

}

//写指令

void WriteCommandLCD(uchar WCLCD,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC) ReadStatusLCD(); //根据需要检测忙

LCD_RS = 0;

LCD_RW = 0;

LCD_Data = WCLCD;

LCD_E = 1;

LCD_E = 1;

LCD_E = 1;

LCD_E = 0;

}

//读数据

uchar ReadDataLCD(void)

{

LCD_RS = 1;

LCD_RW = 1;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

return(LCD_Data);

}

//读状态

uchar ReadStatusLCD(void)

{

LCD_Data = 0xFF;

LCD_RS = 0;

LCD_RW = 1;

LCD_E = 1;

while (LCD_Data & Busy); //检测忙信号

LCD_E = 0;

return(LCD_Data);

}

void LCDInit(void) //LCM初始化

{

WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号

WriteCommandLCD(0x01,1); //显示清屏

WriteCommandLCD(0x06,1); // 显示光标移动设置

WriteCommandLCD(0x0C,1); // 显示开及光标设置

}

void LCDClear(void) //清屏

{

WriteCommandLCD(0x01,1); //显示清屏

WriteCommandLCD(0x34,1); // 显示光标移动设置

WriteCommandLCD(0x30,1); // 显示开及光标设置

}

void LCDFlash(void) //闪烁效果

{

WriteCommandLCD(0x08,1); //显示清屏

Delay400Ms();

WriteCommandLCD(0x0c,1); // 显示开及光标设置

Delay400Ms();

WriteCommandLCD(0x08,1); //显示清屏

Delay400Ms();

WriteCommandLCD(0x0c,1); // 显示开及光标设置

Delay400Ms();

WriteCommandLCD(0x08,1); //显示清屏

Delay400Ms();

}

//按指定位置显示一个字符

void DisplayOneChar(uchar X, uchar Y, uchar DData)

{

if(Y<1)

Y=1;

if(Y>4)

Y=4;

X &= 0x0F; //限制X不能大于16,Y不能大于1

switch(Y){

case 1:X|=0X80;break;

case 2:X|=0X90;break;

case 3:X|=0X88;break;

case 4:X|=0X98;break;

}

WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码

WriteDataLCD(DData);

}

void DisplayListChar(uchar X, uchar Y, uchar  *DData)

{

uchar ListLength,X2;

ListLength = 0;

X2=X;

if(Y<1)

Y=1;

if(Y>4)

Y=4;

X &= 0x0F; //限制X不能大于16,Y在1-4之内

switch(Y){

case 1:X2|=0X80;break; //根据行数来选择相应地址

case 2:X2|=0X90;break;

case 3:X2|=0X88;break;

case 4:X2|=0X98;break;

}

WriteCommandLCD(X2, 1); //发送地址码

while (DData[ListLength]>=0x20) //若到达字串尾则退出

{

if (X <= 0x0F) //X坐标应小于0xF

{

WriteDataLCD(DData[ListLength]);

ListLength++;

X++;

Delay5Ms();

}

}

}

//图形显示122*32

void DisplayImage (uchar code *DData){

uchar x,y,i;

unsigned int tmp=0;

for(i=0;i<9;){  //分两屏,上半屏和下半屏,因为起始地址不同,需要分开

for(x=0;x<32;x++){    //32行

WriteCommandLCD(0x34,1);

WriteCommandLCD((0x80+x),1);//列地址

WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88

WriteCommandLCD(0x30,1);

for(y=0;y<16;y++)

WriteDataLCD(DData[tmp+y]);//读取数据写入LCD

tmp+=16;

}

i+=8;

}

WriteCommandLCD(0x36,1); //扩充功能设定

WriteCommandLCD(0x30,1);

}

//5ms延时

void Delay5Ms(void)

{

unsigned int TempCyc = 5552;

while(TempCyc--);

}

//400ms延时

void Delay400Ms(void)

{

uchar TempCycA = 5;

unsigned int TempCycB;

while(TempCycA--)

{

TempCycB=7269;

while(TempCycB--);

};

}

//:CD12864.h

//============================================================

//Header include

#ifndef __LCD12864_H__

#define __LCD12864_H__

#ifndef __HEADER_H__

#define __HEADER_H__

#include

#include

#define uchar unsigned char

#define uint unsigned int

#endif

//============================================================

//函数声明

extern void WriteDataLCD(uchar WDLCD);

extern void WriteCommandLCD(uchar WCLCD,BuysC);

extern uchar ReadDataLCD(void);

extern uchar ReadStatusLCD(void);

extern void LCDInit(void);

extern void LCDClear(void);

extern void LCDFlash(void);

extern void DisplayOneChar(uchar X, uchar Y, uchar DData);

//void DisplayListChar(uchar X, uchar Y, uchar code *DData);

extern void DisplayListChar(uchar X, uchar Y, uchar *DData);

extern void DisplayImage (uchar code *DData);

extern void Delay5Ms(void);

extern void Delay400Ms(void);

//============================================================

//此为硬件配置,请作相应的修改

sbit LCD_RS=P1^0;//定义引脚

sbit LCD_RW=P1^1;

sbit LCD_E=P1^2;

sbit PSB =P3^6;  //PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1

#define LCD_Data P2

#define Busy    0x80 //用于检测LCD状态字中的Busy标识

#endif

我要忙呢~~~~~最近很忙也很烦~~~~DEBUG的烦恼,需要耐心再耐心!!!!

c 控制 汇编语言,C 和 汇编语言的混合编程(实时控制TLC1549的实现)相关推荐

  1. C/C++还能混合编程

    什么是C/C++混合编程? 我们都知道C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制) 对于 ...

  2. 嵌入式c语言汇编混合编程,嵌入式C语言和汇编语言的混合编程

    此文章简单介绍 单片机 C语言和汇编语言混合编程的例子.主要用单片机汇编语言编写DS1302的底层驱动,在C语言里通过调用汇编语言,从而实现C和汇编的混合编程. ;汇编语言源文件 ;========= ...

  3. c语言汇编混合编程方法,C语言和汇编语言混合编程方法

    摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...

  4. keil4c语言和汇编混合,keil C语言与汇编语言混合编程

    keil C语言与汇编语言混合编程 1. C语言中嵌入汇编 1.在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ; Assembler Code Here #pragm ...

  5. c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验

    混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...

  6. C语言数据交换算法和伪指令,补充:单片机c语言与汇编语言混合编程.ppt

    补充:单片机c语言与汇编语言混合编程 reg51.h和reg52.h:实质上是没有区别的,都是一些特殊功能寄存器的申明 sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0 ...

  7. 汇编c语言混合编程pdf,C语言及汇编语言混合编程的方法.pdf

    维普资讯 1993矩 化 工 电 子 计 算 第 2期 C语言与汇编语言混合编程的方法 f/1) (南京犬李葛于如丽顶吾学系) 摘 要 本文通过实例阐述了当前较为漉行的两种c语盲 (Microsoft ...

  8. keil下C与汇编语言混合编程

    文章目录 前言 一.在c函数中调用汇编函数 1.调用不带参数的汇编函数 2.调用带形参的汇编函数 二.在汇编函数中调用c函数 三.汇编函数与c函数混合调用 总结 前言 如今C语言很强大,在嵌入式编程当 ...

  9. c语言混合编程 pdf,C语言与汇编语言混合编程的方法.pdf

    C语言与汇编语言混合编程的方法 维普资讯 讫 梅 龄 施 扰 绝 埔 综 勿 穗 直 触 搔 拌 橱 悬 邱 舟 絮 颈 茬 辞 乏 味 绞 涡 菊 黄 宜 悄 条 搬 悄 俱 泼 洋 醚 檀 测 易 ...

  10. c语言与汇编语言混合编程

    如何从汇编语言过渡到c语言? 从编译过程谈起 编译小知识 源代码编译后得到目标文件 (二进制文件) 不同语言可编译得到相同格式的目标文件 链接器负责将目标文件组装得到可执行文件 老生常谈的问题... ...

最新文章

  1. tensorflow1
  2. 【蓝桥杯】【入门题】【算法提高VIP】1480:模拟计算器
  3. winform 系统托盘程序
  4. Java 的 IO 很复杂?用思路带领你去battle他!
  5. Bootstrap4+MySQL前后端综合实训-Day06-PM【MD5加码-生成32位md5码、ResultData.java、分页查询用户数据、添加用户按钮的实现】
  6. 【java】求两个字符串的最长公共子串
  7. 搭建dubbo框架的遇到的一些问题
  8. c 11 主要的新语言特性,C 11系列
  9. SecureCRT 登录跳板机自动连接目标服务器
  10. js 全国城市地区编码+拼音+大写首字母
  11. MySQL 数据库扩容方案
  12. 解决Shiro 加权限注解失效 或者报错 This subject is anonymous
  13. 韩国28岁自由职业者生活曝光,引40万人围观:自律的人生,到底有多爽?
  14. unity——删除父物体下面的所有子物体
  15. Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数
  16. 强连接运营社张强:一篇文章带你读懂私域流量的本质和玩法
  17. 码、候选码、主键、主属性
  18. Hive--窗口函数
  19. 7款让人惊叹的HTML5粒子动画特效
  20. SRCNN超分辨率Pytorch实现,代码逐行讲解,附源码

热门文章

  1. 名帖163 颜真卿 行书《祭侄文稿》
  2. chrome安装插件,安装Postman
  3. Latex (2)Latex中插图、表格、浮动体
  4. 2016淘宝首页改版 细说淘宝首页设计变化史
  5. 学python要多少钱-python编程培训需要多少钱?
  6. 使用IDEA快速画类图
  7. 【haoi2009】毛毛虫
  8. 关于unity3D shader的UV理解
  9. 上面两点下面一个三角形_一个调和线束的证明
  10. windows系统修复