1. 单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)怎么编程
//段码由P0口输出,P2.3-P2.0依次接位选的高到低
#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
void Delay(void);
void Disp(void);
u16 Cnt;
u8 code LED[]={
0x3F,// 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0x07,// 7
0x7F,// 8
0x6F,// 9
0x77,// A
0x7C,// B
0x39,// C
0x5E,// D
0x79,// E
0x71// F
};
void Delay(void)
{
u16 i;
for(i = 0;i < 200;i ++)
;
}
void Disp(void)
{
u8 i,k = 0x01;
for(i = 0;i < 4;i ++)
{
P0 = LED[(Cnt >> (i * 4)) & 0x000f];
P2 = k | 0xf0;
k <<= 1;
Delay();
P0 = 0xff;
P2 &= 0xf0;
}
}
void main(void)
{
u8 i;
Cnt = 0;
while(1)
{
for(i = 0;i < 100;i ++)//显示100次,显示值加1
{
Disp();
}
Cnt ++;
}
}
2. 利用51单片机实现2字节16进制数乘法
;双字节无符号数乘法程序(R3R4*R6R7)=(R5R2R3R4)
NMUL22:MOVA,R4
MOVB,R7
MULAB
XCHA,R4
MOVR5,B
MOVB,R6
MULAB
ADDA,R5
MOVR5,A
CLRA
ADDCA,B
MOVR2,A
MOVA,R3
MOVB,R7
MULAB
ADDA,R5
MOVR5,A
MOVA,B
ADDCA,R2
MOVR2,A
CLRA
ADDCA,#00H
XCHA,R3
MOVB,R6
MULAB
ADDA,R2
MOVR2,A
MOVA,B
ADDCA,R3
XCHA,R5
MOVR3,A
CLROV
RET
3. 单片机编程中P0=0x7f,这个十六进制数是什么意思
0x7f = 0111 1111
0x是十六进制的开头表示,p0.7的电平被赋为低电平(0),其它引脚为高电平,LED的另一端接着电源,低电平这个脚会构成通路,所以这个LED亮。
0xfe转为二进制值为1111 1110, 所以在这样赋值后,该组8个管脚依次会按照对应位的值,输出高(1)或者低(0)电平。 对于0xfe, 则对应电平为高高高高高高高低。
(3)单片机16进制编程图扩展阅读:
单片机的高级语言
51单片机支持三种高级语言,即PL/M,C和BASIC。C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用较广的单片机编程语言。
单片机的C语言采用C51编译器(简称C51)。有C51产生的目标代码短,运行速度高,所需存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混合使用。
4. 【单片机】如何用1602液晶显示十六进制数
嗯,大概就是这个样子...
可能会有拼写错误,自己检查下...
//-----------------------------------------
unsigned char hex_table[16] =
{
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
//------------------------------------------
void display_num(unsigned int num)
{
unsigned int a, b, c, d;
a = (num/256)/16; //取高字节的高4位
b = (num/256)%16; //取高字节的低4位
c = (num%256)/16; //取低字节的高4位
d = (num%256)%16; //取低字节的低4位
write_com(0x80); //显示的初始地址
// write_data('n');
// write_data('u');
// write_data('m');
// write_data('=');
// write_data('0');
// write_data('x');
write_data(hex_table[a]);
write_data(hex_table[b]);
write_data(hex_table[c]);
write_data(hex_table[d]);
}
//------------------------------------------
5. 51单片机16进制编程
如果是ASCII码表内的符号值,那么ASCII值本身就可以认为是 16进制的(因为进制只是给人看的,单片机只有2进制,没有ASCII 和 Hex 之分),但如果是Hex值,经过ASCII发送后,需要接收解出数值,那么可以用这个函数:
uchar ASCII_ToHex(uchar ascii_data) //ASCII 转 Hex 函数
{
uchar hex_data=0; //定义 Hex变量存储转换结果
if(ascii_data>='0' && ascii_data<='9') hex_data=ascii_data-'0'; //若 转换内容为 字符'0-9',则转成对应数字0-9
else if(ascii_data>='a' && ascii_data<='f') hex_data=ascii_data-'a'+10; //若 转换内容为 字符'a-f',则转成数字10-15
else if(ascii_data>='A' && ascii_data<='F') hex_data=ascii_data-'A'+10; //若 转换内容为 字符'A-F',则转成数字10-15
return hex_data; //返回转换结果,非以上字符,不在Hex(0-F)范围内,默认0
}//
6. 我想利用单片机通过串口发送几个16进制数FF 10 11 01 DD 求高手指点,不胜感激。
单片机通过串口发送几个16进制数FF 10 11 01 DD,程序如下:
void Send(unsigned char Tx_Data)//向串口发字符
{
SBUF=Tx_Data;
while(!TI);
TI=0;
}
main()
{
先串口初始化,然后:
Send(0xFF);
Send(0x10);
Send(0x11);
Send(0x01);
Send(0xDD);
即可。
}