导航:首页 > 编程语言 > c51显示缓存区编程方法

c51显示缓存区编程方法

发布时间:2024-08-24 03:51:13

A. 为什么c51程序中总会出现 syntax error near 'int'

有两个问题:1、变量的定义要放到函数的开始位置;
2、单片机寄存器的位引用要使用^,比如P2^5;
改过后的程序:
#include"reg51.h"
#include"string.h"
#include"intrins.h"
#include"absacc.h"
#include"stdlib.h"
#include"math.h"
typedef unsigned char uchar;
sbit BEEP=P1^1; //蜂鸣器
sbit KEY=P1^2;//LED
uchar table[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};
uchar disbuff;//显示缓存
uchar key;
void display(unsigned char disp);
void beep();
void keyscan(void);
void keydown(void);
void delay0(unsigned char x);
void delay(unsigned char x);
void main (void)
{
P0=0xff;
P1=0xff;
P2=0xff;
disbuff=0xbf;
while(1)
{
keyscan();
keydown();
display(disbuff);
delay(2);
}
}
void keyscan(void)
{unsigned int i ;
P2=0xFE;
key=P2;

//unsigned int i ;//总是在这里出错
for (i=0;i<4;i++)
{ if(P2<key)
{
if(P2^6==0)
key=i+i*3+2;
else if(P2^5==0)
key=i+1+i*3;
else key=i+i*3;
break;
}
P2=P2<<1;
}
disbuff=table[key];
}

B. C51单片机动态显示秒分时

兄弟,我粗粗看了一下,问题的确在定时器上。
先告诉你怎么解决吧:
if(TF0==1)
{
//加上以下几句
TF0=0;
TH0=(65536-20000)/256;//
TL0=(65536-20000)%256;//定时20ms

………你自己的程序……
buffer[4]=hour%10;
buffer[5]=hour/10;

}
如果你的定时器初始值TH0,TL0没有计算错的话应该正常了。

你的原因在:方式1定时器溢出之后TF0是需要手动清零的。因为你没有清0,所以if(TF0==1)这个判断一直成立,定时器当然没有用了。
再者,方式1定时器溢出之后TH0,TL0会自动清零,如果需要定时器继续按方式1工作下去,应该再给TH0,TL0重新赋初值或定时时间常数。

最后有个建议,
TH0=(65536-20000)/256;//
TL0=(65536-20000)%256;//定时20ms
这两个TH0,TL0定时常数赋值还是你自己直接算一下写进去好了,反正是个常数。单片机计算上面两个式子很累的啊,特别是这里的除法,取余运算。

C. keil C51程序编译的问题

如果你的H头文件包含在每个.C文件中,那就是说你的每个.C文件都定义了sbuf[20],KEIL就会提示你说你的sbuff[20]重复定义。我理解的应该是这个问题吧?

解决办法,要么用条件编译区分sbuff的作用域,就是在哪些.c文件中使用。
要么在一个.c文件中定义sbuff,在H文件中用外部声明包含进去,比如:
extern unsigned char data char sbuf[20];这样在其他的.C文件中,sbuff是引用而不是定义了。

一般都是采用第二种方式,H文件只存放外部声明。

D. 单片机中的显示缓冲区是什么,有什么用

单片机中的显示缓冲区就是几个变量或者一个数组而已,用于保存需要显示出来的数据。

程序将需要显示的数据计算出来后保存在这里面,然后当数码管扫描函数运行时就将缓冲区内的数据发送出来了,这是一种比较优化的编程方法。

它能将数据计算部分和数码管扫描部分的代码分开,在复杂的程序中这样写可以简化程序的调度。在很简单的程序中没必要这么写。

(4)c51显示缓存区编程方法扩展阅读:

缓冲区的作用是为了解决速度不匹配的问题,高速的cpu与内存,内存与硬盘,cpu与io等速度不匹配的问题,而引人缓冲区,比如我们从磁盘里读取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中读取数据,等缓冲区的数据读取完后再去磁盘中读取。

这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU。解放出CPU,使其能够高效率工作。

E. 请问C51单片机电子时钟的设计程序怎么样编写啊

BUFF_KEY EQU 21H ;键盘键
BUFF_LED1 EQU 22H ;数码管显示缓存
BUFF_LED2 EQU 23H
BUFF_LED3 EQU 24H
BUFF_LED4 EQU 25H
BUFF_LED5 EQU 26H
BUFF_LED6 EQU 27H
BUFF_LED_LP EQU 28H ;T0键盘显示扫描缓存
HOR EQU 30H ;小时值缓存
MIN EQU 31H ;分钟值缓存
SEC EQU 32H ;秒值缓存
F_BEEP BIT 01H
LED_PORT EQU P0
DIG_PORT EQU P2
KEY_PORT EQU P2
SW1 BIT P2.7
SW2 BIT P2.6
SW3 BIT P2.5
SW4 BIT P2.4
SW5 BIT P2.3
SW6 BIT P2.2
BEEP BIT P2.0
KEY BIT P3.3
org 000h
JMP main
ORG 00BH
JMP T0_INT
ORG 100H
MAIN: MOV SP ,#40H
MOV PSW,#00H
MOV R0,#7FH ;初始化RAM区,
CLR_RAM:MOV A,#00H
MOV @R0,A
DJNZ R0,CLR_RAM
MOV P1,0FFH ;INIT
MOV P2,0FFH
MOV P0,0FFH
MOV P3,0FFH
MOV TMOD,#21h
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
SETB TR0
SETB ET0
SETB EA

WAIT_KEY:JB KEY,$ ;等候按键!
JNB SW1,SW1_OK
JNB SW2,SW2_OK
JNB SW3,SW3_OK
JNB SW4,SW4_OK
JNB SW5,SW5_OKA
JNB SW6,SW6_OKA
JMP WAIT_KEY
SW5_OKA: JMP SW5_OK
SW6_OKA: JMP SW6_OK
SW1_OK: MOV A,HOR
CJNE A,#24,SW1_OVER
MOV HOR,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW1_OVER:INC HOR ;时加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW2_OK: MOV A,HOR
CJNE A,#00,SW2_OVER
MOV HOR,#23
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW2_OVER:DEC HOR ;时减1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
JMP WAIT_KEY

SW3_OK: MOV A,MIN
CJNE A,#59,SW3_OVER
MOV MIN,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW3_OVER:INC MIN ;分加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW4_OK: MOV A,MIN
CJNE A,#00,SW4_OVER
MOV MIN,#59
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW4_OVER:DEC MIN ;分减1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW5_OK: MOV A,SEC
CJNE A,#59,SW5_OVER
MOV SEC,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW5_OVER:INC SEC ;秒加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW6_OK: MOV A,SEC
CJNE A,#00,SW6_OVER
MOV HOR,#59
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW6_OVER:DEC SEC ;时减1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

DEL: MOV R5,#02 ;为演示方便,人为插入的延时
DEL01: MOV R6,#200
DEL02: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL02
DJNZ R5,DEL01
RET

BIN_BCD: MOV B,#10
DIV AB
RET

;------------- T0 INTRRUPT 数码管扫描定时中断---------------------------
T0_INT: PUSH ACC
PUSH PSW
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
INC BUFF_LED_LP
MOV A,BUFF_LED_LP
CJNE A,#250,CONT_SCAN ;250*4MS=1S
MOV BUFF_LED_LP,#00H
INC SEC
MOV A,SEC
CJNE A,#60,CONT_SCAN
MOV SEC,#00H
INC MIN
MOV A,MIN
CJNE A,#60,CONT_SCAN
MOV MIN,#00H
INC HOR
MOV A,HOR
CJNE A,#24,CONT_SCAN
MOV HOR,#00H
clr beep
clr p1.0
lcall del
setb beep
setb p1.0
CONT_SCAN:MOV A,SEC
LCALL BIN_BCD
MOV BUFF_LED6,B
MOV BUFF_LED5,A
MOV A,MIN
LCALL BIN_BCD
MOV BUFF_LED4,B
MOV BUFF_LED3,A
MOV A,HOR
LCALL BIN_BCD
MOV BUFF_LED2,B
MOV BUFF_LED1,A
MOV A,BUFF_LED_LP
MOV B,#06
DIV AB
MOV A,B
RL A
MOV DPTR,#TAB_SCAN
JMP @A+DPTR
TAB_SCAN: AJMP SCAN_L1
AJMP SCAN_L2
AJMP SCAN_L3
AJMP SCAN_L4
AJMP SCAN_L5
AJMP SCAN_L6
SCAN_L1: MOV DIG_PORT,#01111111B
MOV A,BUFF_LED1
JMP END_SCAN
SCAN_L2: MOV DIG_PORT,#10111111B
MOV A,BUFF_LED2
JMP END_SCAN
SCAN_L3: MOV DIG_PORT,#11011111B
MOV A,BUFF_LED3
JMP END_SCAN
SCAN_L4: MOV DIG_PORT,#11101111B
MOV A,BUFF_LED4
JMP END_SCAN
SCAN_L5: MOV DIG_PORT,#11110111B
MOV A,BUFF_LED5
JMP END_SCAN
SCAN_L6: MOV DIG_PORT,#11111011B
MOV A,BUFF_LED6
END_SCAN: MOV DPTR,#TAB_LED
MOVC A,@A+DPTR
MOV LED_PORT,A
JNB F_BEEP,EXIT_T0
CLR BEEP
EXIT_T0: POP PSW
POP ACC
RETI

TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;数码管显示字型表
DB 82H,0F8H,80H,90H,88H,83H,0A7H
DB 0A1H,86H,8EH

END

阅读全文

与c51显示缓存区编程方法相关的资料

热点内容
linux好用的编辑器 浏览:998
linuxpartprobe 浏览:315
视频教育网站源码 浏览:513
java指定位数的随机数 浏览:900
300公斤压缩机 浏览:549
java时间转换毫秒数 浏览:290
我的世界怎么开挂在服务器 浏览:848
app怎么退定金 浏览:925
php获取外网地址 浏览:172
单片机lan 浏览:582
html炫酷黑页源码 浏览:955
如何远程更新服务器 浏览:785
服务器导轨怎么安装图解 浏览:984
如何设置加密共享文档 浏览:656
单片机双灯左移右移 浏览:927
网页无法打开pdf 浏览:556
linux命令scp 浏览:519
怎样把图片转为pdf格式 浏览:115
linux变量类型 浏览:840
linux中网卡配置 浏览:704