sm4205共阳极数码管

 

sm4205

  型号为SM4205的八段数码管是共阴极的。它带小数点(dp)位,有10个管脚。具体段码和管脚对应关系见附图,图中×表示悬空。
  设端口顺序按IO7-0对应dp,g-a,则其显示段码表如下:
  (1)不带小数点dp
   

0

3FH

06H

5BH 

4FH 

66H 

6DH 

7DH 

07H 

8

7FH

6FH 

77H 

7CH 

39H 

5EH 

79H 

71H 


  注:熄灭为00H
  (2)带小数点dp
   

0

0B3FH

86H

0DBH 

0CFH 

0E6H 

0EDH 

0FDH 

87H 

8

0FFH

0EFH 

0F7H 

0FCH 

0B9H 

0DEH 

0F9H 

0F1H 

注:熄灭为80H

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是STC89C52RC单片机使用矩阵键盘输入数字和发送键,并将输入数据显示在8位阳极数码管上,并通过串口通信发送给计算机,计算机使用ISP串口接收的C语言代码: 单片机端: ```c #include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; #define KEY P0 #define DIG P1 #define SEND P3_4 uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; uchar keyscan(); void delay(uint x); void send_data(uchar dat); void main() { uchar key, dat, dig, i; TMOD = 0x01; //定时器0工作在模式1,16位计数器 TH0 = 0xfc; //定时器初值 TL0 = 0x18; TR0 = 1; //启动定时器0 ET0 = 1; //开启定时器0中断 TH1 = 0xfd; //波特率9600 TL1 = 0xfd; TR1 = 1; //启动定时器1 SM0 = 0; SM1 = 1; //使用串口模式1 REN = 1; //启动串口接收 EA = 1; ES = 1; //开启总中断和串口中断 while(1) { key = keyscan(); if(key != 0xff) { if(key == 0x0a) //发送键按下 { SEND = 0; for(i=0; i<10; i++) //发送10个字节 { send_data(dat); delay(10); } SEND = 1; } else //数字键按下 { dat = key; } } dig = dat / 100; //分解数字位 DIG = 0x07; //选择第一位数码管 P2 = table[dig]; delay(5); DIG = 0x0b; //选择第二位数码管 P2 = table[(dat%100)/10]; delay(5); DIG = 0x0d; //选择第三位数码管 P2 = table[dat%10]; delay(5); } } uchar keyscan() //键盘扫描函数 { uchar i, j, key; KEY = 0x0f; for(i=0; i<4; i++) { KEY = _crol_(KEY, 1); //按行扫描 key = KEY & 0x0f; if(key != 0x0f) //有按键按下 { delay(10); //去抖动延时 if((KEY & 0x0f) != 0x0f) //判断抖动后是否仍有按键按下 { return (i*4 + key); //返回按键值 } } } return 0xff; //无按键按下 } void delay(uint x) //延时函数 { uint i, j; for(i=x; i>0; i--) for(j=110; j>0; j--); } void send_data(uchar dat) //通过串口发送数据 { SBUF = dat; while(!TI); TI = 0; } void timer0() interrupt 1 //定时器0中断函数 { TH0 = 0xfc; //重新赋初值 TL0 = 0x18; send_data(0xaa); //每隔1s发送一个0xaa } ``` 计算机端: 使用ISP串口接收数据的代码与普通串口接收数据的代码基本相同,只需要修改一下串口初始化的代码即可。在使用ISP串口时,需要选择正确的串口号和波特率,同时确保连接正确。 ```c #include <regx51.h> typedef unsigned char uchar; typedef unsigned int uint; void serial_init() { PCON &= 0x7f; //SMOD=0 SCON = 0x50; //串口工作在模式1 TMOD &= 0x0f; //清除定时器1的设置 TMOD |= 0x20; //定时器1工作在模式2,8位自动重装载 TH1 = 0xfd; //波特率9600 TL1 = 0xfd; TR1 = 1; //启动定时器1 ES = 1; //开启串口中断 EA = 1; //开启总中断 } void main() { uchar dat; serial_init(); while(1) { if(RI) //如果接收到数据 { RI = 0; dat = SBUF; //处理接收到的数据 } } } void serial() interrupt 4 using 1 //串口中断函数 { if(RI) //如果接收到数据 { RI = 0; dat = SBUF; //处理接收到的数据 } } ``` 注意:以上代码仅供参考,可能存在错误或不足之处,使用时请根据实际情况进行修改和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值