共阴极7段数码管显示C程序 51单片机的共阴数码管怎么显示数字(c语言)

C\u8bed\u8a00\u7a0b\u5e8f4\u4f4d7\u6bb5\u6570\u7801\u7ba1\u5171\u9634\u6539\u5171\u9633

\u5171\u9633\u6781\uff1a
\u4f4d\u9009\u4e3a\u9ad8\u7535\u5e73\uff08\u53731\uff09\u9009\u4e2d\u6570\u7801\u7ba1,
\u5404\u6bb5\u9009\u4e3a\u4f4e\u7535\u5e73\uff08\u53730\u63a5\u5730\u65f6\uff09\u9009\u4e2d\u5404\u6570\u7801\u6bb5, \u75310\u5230f\u7684\u7f16\u7801\u4e3a: uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};

\u8981\u8ba951\u5355\u7247\u673a\u5171\u9634\u6570\u7801\u7ba1\u663e\u793a\u6570\u5b57\uff0c\u53ea\u9700\u8981\u5c06\u5355\u7247\u673a\u7684P2\u7aef\u53e3\u8f93\u51fa\u6570\u5b57\u5bf9\u5e94\u7684\u6bb5\u7801\u5373\u53ef\u3002
\u4ee5\u663e\u793a\u6570\u5b57\u201c0\u201d\u4e3a\u4f8b\uff0cc\u8bed\u8a00\u7a0b\u5e8f\u5982\u4e0b\uff1a
#include
#define uchar unsigned char
#define uint unsigned int
//\u6570\u7801\u7ba1\u7684\u6bb5\u7801\u7f16\u7801
Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(){//\u4e3b\u51fd\u6570
P0 = table[0];//\u663e\u793a0\uff0c\u5927\u5bb6\u53ef\u4ee5\u4fee\u6539\u91cc\u9762\u7684\u6570\u636e\u3002
while(1);//\u7a0b\u5e8f\u4e0d\u518d\u6267\u884c\u5176\u4ed6\u6b65\u9aa4\uff1b
}

\u6269\u5c55\u8d44\u6599\uff1a
\u6570\u5b570-9\u7684\u5bf9\u5e94\u6bb5\u7801\uff1a
\u6570\u5b570 0x3f
\u6570\u5b571 0x06
\u6570\u5b572 0x5b
\u6570\u5b573 0x4f
\u6570\u5b574 0x66
\u6570\u5b575 0x6d
\u6570\u5b576 0x7d
\u6570\u5b577 0x07
\u6570\u5b578 0x7f
\u6570\u5b579 0x6f

单片机7段数码管动态显示程序代码及其说明如下:

#include <reg51.h>

#include <intrins.h>

#include<math.h>

unsigned char data dis_digit; //dis_digit---位选通值, 传送到P2口用于选通当

//前数码管的数值, 如等于0xfe时,选通P2.0口数码管

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3

扩展资料:

驱动方式:

直流驱动。

是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。优点是编程简单,显示亮度高,缺点是占用I/O端口多。

动态显示驱动:

是将所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

参考资料来源:百度百科-七段数码管






照着这个去改写吧:
单片机7段数码管动态显示程序代码及其说明如下:
#include <reg51.h>
#include <intrins.h>
#include<math.h>
unsigned char data dis_digit; //dis_digit---位选通值, 传送到P2口用于选通当

//前数码管的数值, 如等于0xfe时,选通P2.0口数码管
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char data dis_buf[8]; // dis_buf --- 显于缓冲区基地址
unsigned char data dis_index; // dis_index --- 显示索引, 用于标识当前显示的数码 //管和缓冲区的偏移量
Void delay(int t)
{
int i;
while(t--) {
for(i=0;i<120;i++)
{;}
}
}
Void main()
{
P0 = 0xff;
P2 = 0xff;
TMOD = 0x01; //定时器0工作于方式1
TH0 = 0x8C;
TL0 = 0x8B;
IE = 0x8A; //开总中断和定时器1中断允许

dis_buf[0] = dis_code[0x1];
dis_buf[1] = dis_code[0x2];
dis_buf[2] = dis_code[0x3];
dis_buf[3] = dis_code[0x4];
dis_buf[4] = dis_code[0x5];
dis_buf[5] = dis_code[0x6];
dis_buf[6] = dis_code[0x7];
dis_buf[7] = dis_code[0x8];
dis_digit = 0xf9; //控制在数码管上显示的数字效果,按位
dis_index = 0;
TR0 = 1;
while(1);

}

Void timer0() interrupt 1
//定时器0中断服务程序, 用于数码管的动态扫描
//dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
//dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值,

//如等于0xfe时, 选通 P2.0口数码管 dis_buf --- 显于缓冲区基地址
{
TH0 = 0x8C;
TL0 = 0x8B;
P2 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P2 = dis_digit;

dis_digit = _crol_(dis_digit,2); // 位选通值左移, 下次中断时选通下一位数码管
delay(500);
dis_index++;
dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描

}

  • C璇█ 鍗曠墖鏈哄紑鍙戞澘 閿佸瓨鍣 7娈LED鏁扮爜绠妯″潡鏄剧ず闂
    绛旓細P2^7鏄綅閫夐攣瀛樺櫒 鎺у埗閭e嚑涓暟鐮佺浜 P2^6鏄閫夐攣瀛樺櫒 鎺у埗鏁扮爜绠℃樉绀鐨勬暟瀛椼佽繖鏄垜闅忎究鍐欑殑涓涓灏忕▼搴 include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e...
  • 鍏充簬7娈垫暟鐮佺鏄剧ず闂
    绛旓細濡俻0.7锛夋帴dp锛鏄剧ず鐮佷粠楂樺線浣庤〃绀轰负涓 dp g f e d c b a 濡傝鏄剧ず鈥1鈥濓紝鍙渶瑕佸皢b銆c娈鐐逛寒鍗冲彲锛岃嫢鏄鍏遍槾鏋锛岀墖閫夋槸浣庣數骞抽変腑锛屾煇涓娈佃緭鍑洪珮鐢靛钩鐐逛寒锛屽嵆鏄剧ず鐮佷负00000110 鍗0x06锛屽叾浠栫殑渚濈収璇ユ柟娉曠被鎺 浣犵粰鐨勭爜琛ㄤ负鍏遍槾鏋佺殑銆傚叡闃虫瀬鐨勬伆宸х浉鍙嶏紒鏁扮爜绠鐨勭ず鎰忓浘濡備笅鍥炬墍绀 ...
  • 涓冩鍏遍槾鏋佹暟鐮佺鏄剧ず瀛楃p娈电爜搴斾负
    绛旓細杩欏畬鍏ㄥ彲浠ヨ嚜宸辩畻鍑烘潵鍛.浜岃繘鍒剁爜涓:0111 0011=73H,C璇█鏄0x73
  • 51鍗曠墖鏈烘帶鍒3浣7娈靛叡闃存暟鐮佺
    绛旓細//51鍗曠墖鏈烘帶鍒3浣7娈靛叡闃存暟鐮佺 p0鍙f帶鍒 abcdefg dp 锛//p2.0锛峱2.2鎺у埗123浣嶏紝锛嶏紞锛嶆敞鎰忥細娌℃湁鐢≒2.3銆//瑕佷娇鍏堕棿闅1S鍒嗗埆鏄剧ず123锛231,321,213...鏃犻檺寰幆 //涓嬪垪绋嬪簭锛岀粡杩囦豢鐪燂紝绗﹀悎瑕佹眰銆俰nclude <reg52.h> define uchar unsigned char sbit bit1 = P2^0;sbit bit2 = P2^...
  • C璇█绋嬪簭4浣7娈垫暟鐮佺鍏遍槾鏀瑰叡闃
    绛旓細鍏遍槼鏋侊細浣嶉変负楂樼數骞筹紙鍗1锛夐変腑鏁扮爜绠,鍚勬閫変负浣庣數骞筹紙鍗0鎺ュ湴鏃讹級閫変腑鍚鏁扮爜娈, 鐢0鍒癴鐨勭紪鐮佷负: uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
  • 姹備竴涓7娈垫暟鐮佺鐨鏄剧ず绋嬪簭
    绛旓細鍏叡鏋佺洿鎺ユ帴VCC 鍗曠墖鏈烘帶鍒跺叾浠栧紩鑴 include<reg51.h> define smg P2 unsigned char tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};void main(){ smg=tab[0];} //绋嬪簭灏卞埌杩欓噷 tab[]杩欎釜涓嫭鍙烽噷闈㈢殑鏁板瓧鍙互闅忔剰涓0-9 鏁扮爜绠℃樉绀涓哄搴旂殑鏁板瓧 鍦ㄥ墠闈㈢殑鏁扮粍涓凡缁...
  • 鐢C璇█缂栫▼涓や釜鎸夐敭鎺у埗涓変釜7娈垫暟鐮佺鏄剧ず0~99
    绛旓細A MOV R2, #10 ML3:CALL DL10MS DJNZ R2, ML3 JB K_ADD, M_LOOP JMP ML2 ;--- DL10MS:MOV R6, #20 MOV R7, #110 DJNZ R7,DJNZ R6, $ - 2 RET END 姹囩紪鐨绋嬪簭锛屽簲璇ヤ笉绗﹀悎瑕佹眰锛屼篃灏辨病鏈夊鍐欙紝浠呬粎鏈夊姞涓鐨勫姛鑳姐
  • 鍒╃敤8255璁捐涓浣7娈LED鏁扮爜鏄剧ず鐢佃矾,鏁扮爜绠涓鍏遍槾鏋,寰幆鏄剧ず0-9,鏃 ...
    绛旓細鍒╃敤8255璁捐涓浣7娈LED鏁扮爜鏄剧ず鐢佃矾,鏁扮爜绠涓鍏遍槾鏋,寰幆鏄剧ず0-9,鏃堕棿闂撮殧1S,鑷紪寤舵椂瀛绋嬪簭銆 10 鎬,璋㈣阿澶у浜唦 鍖垮悕 | 娴忚6850 娆 |涓炬姤 鎴戞湁鏇村ソ鐨勭瓟妗堟帹鑽愪簬2017-12-16 11:03:52 鏈浣崇瓟妗 涓烘柟渚胯捣瑙,浠ゆ暟鎹,PORT1 POR2鍒嗗埆涓,I/O鍙A,PB鐨勫湴鍧PA杩炲叓鐩忕伅,PB鍙繛涓ょ洀AGAIN:MOV AL,01H...
  • 鍩轰簬Quartus2璁捐涓冩鍏遍槾鏋佹暟鐮佺璇戠爜鍣ㄧ殑绋嬪簭瀹炰緥
    绛旓細module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0);output a,b,c,d,e,f,g;input D3,D2,D1,D0; //杈撳叆鐨4 浣岯CD 鐮 reg a,b,c,d,e,f,g;always @(D3 or D2 or D1 or D0)begin case({D3,D2,D1,D0}) //鐢╟ase 璇彞杩涜璇戠爜 4'd0: {a,b,c,d,e,f,g}=7'...
  • 鍏遍槾鏋佷竷娈垫暟鐮佺鎬庝箞鏄剧ず?
    绛旓細| C | 1100 | BCDFG | | D | 1101 | BCDFG | | E | 1110 | BCDEFG | | F | 1111 | ABCDFG | 姣忎釜鏁板瓧鎴栧瓧姣嶇殑浜岃繘鍒朵唬鐮佷唬琛ㄤ簡鍏遍槾鏋佷竷娈垫暟鐮佹樉绀虹涓瘡涓狶ED娈电殑寮鍏崇姸鎬併備緥濡傦紝鏁板瓧鈥8鈥濈殑浜岃繘鍒朵唬鐮佹槸鈥1000鈥濓紝杩欒〃绀烘墍鏈夌殑LED娈甸兘闇瑕佷寒璧凤紝浠ユ樉绀哄畬鏁寸殑鏁板瓧鈥8鈥濄傚彟...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网