c语言 code table,单片机C语言unsigned char code table是什么意思?

393e01e3fefb6950afccfadfe5e65e99.png

unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。

同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。

关于char的符号(选自thinking in C++ 2nd vol1):

signed is the default and is only necessary with char; char may or may not default to signed. By specifying signed char, you force the sign bit to be used.

译:有符号类型是默认(指的是对于其他整型来说)的类型并且仅对于char来说才是必须的。char有可能是signed也有可能是unsigned(我想这可能取决于编译器或具体实现)。但通过显式地指定一个char为signed,你就迫使其成为有符号的字符型(水平太烂译的不好请见谅)。

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于C51单片机的万年历程序示例: ```c #include <reg52.h> // 定义闰年月份天数 unsigned char code day_table[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; unsigned char code day_leap_table[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 定义LCD1602连接引脚 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit LCD1602_DATAPINS_4=P0^4; sbit LCD1602_DATAPINS_5=P0^5; sbit LCD1602_DATAPINS_6=P0^6; sbit LCD1602_DATAPINS_7=P0^7; // 函数声明 void init_lcd(void); // 初始化LCD1602 void display_char(unsigned char x,unsigned char y,unsigned char dat); // 在LCD1602指定位置显示一个字符 void display_string(unsigned char x,unsigned char y,unsigned char *s); // 在LCD1602指定位置显示一个字符串 void display_date(unsigned char year,unsigned char month,unsigned char day); // 在LCD1602指定位置显示日期 // 主函数 void main() { unsigned char year = 21; // 年份为2021年 unsigned char month = 1; // 月份为1月 unsigned char day = 1; // 日为1日 init_lcd(); // 初始化LCD1602 while(1) { display_date(year, month, day); // 在LCD1602上显示日期 // 下面的代码用于更新日期 day++; if(month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) // 判断闰年 { if(day > day_leap_table[month - 1]) { day = 1; month++; } } else { if(day > day_table[month - 1]) { day = 1; month++; } } if(month > 12) { month = 1; year++; } } } // 初始化LCD1602 void init_lcd(void) { display_char(0, 0, 0x38); // 显示模式设置 display_char(0, 0, 0x0c); // 显示开关控制 display_char(0, 0, 0x06); // 显示光标移动设置 display_char(0, 0, 0x01); // 显示清屏 } // 在LCD1602指定位置显示一个字符 void display_char(unsigned char x,unsigned char y,unsigned char dat) { unsigned char addr; if(y == 0) { addr = 0x80 + x; } else { addr = 0xc0 + x; } delay(1); RS = 0; RW = 0; LCD1602_DATAPINS_7 = dat >> 7; LCD1602_DATAPINS_6 = (dat >> 6) & 0x01; LCD1602_DATAPINS_5 = (dat >> 5) & 0x01; LCD1602_DATAPINS_4 = (dat >> 4) & 0x01; EN = 1; delay(1); EN = 0; delay(1); RS = 0; RW = 0; LCD1602_DATAPINS_7 = (dat >> 3) & 0x01; LCD1602_DATAPINS_6 = (dat >> 2) & 0x01; LCD1602_DATAPINS_5 = (dat >> 1) & 0x01; LCD1602_DATAPINS_4 = dat & 0x01; EN = 1; delay(1); EN = 0; } // 在LCD1602指定位置显示一个字符串 void display_string(unsigned char x,unsigned char y,unsigned char *s) { while(*s != 0) { display_char(x, y, *s++); x++; } } // 在LCD1602指定位置显示日期 void display_date(unsigned char year,unsigned char month,unsigned char day) { unsigned char date_str[11]; unsigned char i; // 计算日期字符串 date_str[0] = '2'; date_str[1] = '0'; date_str[2] = year / 10 + '0'; date_str[3] = year % 10 + '0'; date_str[4] = '-'; date_str[5] = month / 10 + '0'; date_str[6] = month % 10 + '0'; date_str[7] = '-'; date_str[8] = day / 10 + '0'; date_str[9] = day % 10 + '0'; date_str[10] = 0; display_string(0, 0, date_str); // 在LCD1602上显示日期 } // 延时函数 void delay(unsigned int i) { unsigned int j,k; for(j=0;j<i;j++) { for(k=0;k<125;k++); } } ``` 该程序使用LCD1602显示日期信息,通过更新日期实现万年历的功能。需要注意的是,该程序仅适用于2021年的日历,如果需要适用于其他年份,需要对程序进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值