数码管0xa0,0xbb代码,多少verilog 十进制数码管的

查看: 12091|回复: 10
51单片机时钟(4位数码管)附原理图 代码 仿真
用手里闲的STC89C52RC做的,并在开发板上调试成功。
#include&reg52.h&
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
sbit d1=P1^0;//定义d1
sbit d2=P1^7;//定义d1
sbit key1=P3^2;//按键定义
sbit key2=P3^3;
sbit key3=P3^4;
sbit key4=P3^5;
sbit LED1=P2^3;
sbit LED2=P2^2;
sbit LED3=P2^1;
sbit LED4=P2^0;
uchar temp,aa,miaos,miaog,qian,bai,shi,ge,fen,sh,bb,
void display(uchar qian,uchar bai,uchar shi,
uchar ge);
void delay(uint z)
& && &&&uint x,y;
& && &&&for(x=z;x&0;x--)
& && &&&for(y=110;y&0;y--);
void init();
void main()
& && &&&init();//初始化子程序
& && &&&mh=1;
& && &&&while(1)
& && &&&{& && &&&
& && && && && & if(key1==0)
& && && && && & {
& && && && && && && && &delay(200);
& && && && && && && && &while(key1==0);
& && && && && && && && &fen++;
& && && && && && && && &if(fen==59)
& && && && && && && && &{
& && && && && && && && && && &&&fen=0;
& && && && && && && && &}
& && && && && & }
& && && && && & if(key2==0)
& && && && && & {
& && && && && && && && &delay(200);
& && && && && && && && &while(key2==0);
& && && && && && && && &if(fen!=0)
& && && && && && && && &{
& && && && && && && && && && &&&fen--;
& && && && && && && && &}
& && && && && && && && &if(fen==0)
& && && && && && && && &{
& && && && && && && && && && &&&fen=59;
& && && && && && && && &}
& && && && && & }
& && && && && & if(key3==0)
& && && && && & {
& && && && && && && && &delay(200);
& && && && && && && && &while(key3==0);
& && && && && && && && &sh++;
& && && && && && && && &if(sh==23)
& && && && && && && && &{
& && && && && && && && && && &&&sh=0;
& && && && && && && && &}
& && && && && & }
& && && && && & if(key4==0)
& && && && && & {
& && && && && && && && &delay(200);
& && && && && && && && &while(key4==0);
& && && && && && && && &if(sh!=0)
& && && && && && && && &{
& && && && && && && && && && &&&sh--;
& && && && && && && && &}
& && && && && && && && &if(sh==0)
& && && && && && && && &{
& && && && && && && && && && &&&sh=23;
& && && && && && && && &}
& && && && && & }
& && && && && & if(aa==20)
& && && && && & {
& && && && && && && && &bb++;
& && && && && && && && &aa=0;
& && && && && && && && &miaog=bb%10;
& && && && && && && && &miaos=bb/10%6;
& && && && && && && && &mh=~
& && && && && & }
& && && && && & if(bb==60)
& && && && && & {
& && && && && && && && &fen++;
& && && && && && && && &bb=0;
& && && && && & }
& && && && && & ge=fen%10;
& && && && && & shi=fen/10%6;
& && && && && & if(fen==60)
& && && && && & {& && &&&sh++;
& && && && && && && && &fen=0;
& && && && && && && && &fen=0;
& && && && && && && && &
& && && && && & }
& && && && && & bai=sh%10;
& && && && && & qian=sh/10;
& && && && && & if(bai==10)
& && && && && & bai=0;
& && && && && & if(qian==2)
& && && && && & {
& && && && && && && && &if(bai==4)
& && && && && && && && &{
& && && && && && && && && && &&&qian=0;
& && && && && && && && && && &&&bai=0;
& && && && && && && && &}
& && && && && & }
& && && && && & if(sh==24)
& && && && && & {& && &&&
& && && && && && && && &sh=0;
& && && && && & }
& && && && && & display(qian,bai,shi,ge);
void display(uchar qian,uchar bai,uchar shi,
& && &&&LED1=1;
& && &&&P0=table[qian];
& && &&&LED1=0;
& && &&&delay(1);
& && &&&LED1=1;
& && &&&LED2=1;
& && &&&P0=table[bai];
& && &&&LED2=0;
& && &&&delay(1);
& && &&&LED2=1;
& && && && && && && && &
& && &&&LED2=1;& && &&&
& && &&&if(mh==1)
& && && &&&P0=0x7F;& && && && && &
& && &&&else P0=0xFF;
& && &&&LED2=0;& && &&&
& && &&&delay(3);
& && &&&LED2=1;
& && && && && && && && && && &&&
& && &&&LED3=1;
& && &&&P0=table[shi];
& && &&&LED3=0;
& && &&&delay(1);
& && &&&LED3=1;
& && && && && &
& && &&&LED4=1;
& && &&&P0=table[ge];
& && &&&LED4=0;
& && &&&delay(1);
& && &&&LED4=1;
void init()
& && &&&d1=1;
& && &&&d2=1;
& && &&&fen=0;
& && &&&sh=0;
& && &&&temp=0;
& && &&&TMOD=0x01;
& && &&&TH0=()/256;
& && &&&TL0=()%256;
& && &&&EA=1;
& && &&&ET0=1;
& && &&&TR0=1;& && &&&
void timer0() interrupt 1
& && &&&TH0=()/256;
& && &&&TL0=()%256;
& && &&&aa++;& && &&&
(227.79 KB, 下载次数: 47)
18:30 上传
(156.6 KB, 下载次数: 25)
18:30 上传
(107.02 KB, 下载次数: 95)
18:31 上传
(51.04 KB, 下载次数: 138)
18:31 上传
18:30 上传
点击文件名下载附件
255.68 KB, 下载次数: 1037
18:30 上传
点击文件名下载附件
390 KB, 下载次数: 35246
好家伙楼主辛苦了源程序都敲上了,谢谢分享
大于号 发表于
好家伙楼主辛苦了源程序都敲上了,谢谢分享
分享嘛,就大大方方的,别藏着掖着。
那几个为什么miaos=bb/10%6;&&%6取余呢
走时精度怎样,一天有几秒误差
程序结构还有很多优化的余地:
扫描按键可以改为状态机,放到定时器中断里,键值放到环形缓冲区里,主程序只管读取识别后的键值
凡是用到delay的地方都可以用状态机去替换掉
建议搜索“protothread”,研读一下,用在这种场合非常合适,练一下手,实现后受益终生
不错,代码很精简。
KAILAI 发表于
走时精度怎样,一天有几秒误差
精度与晶振有关,晶振的精度越高误差越小。
飞越无限 发表于
精度与晶振有关,晶振的精度越高误差越小。
曾经做过一个 感觉误差还是偏大 还有掉电要重新设置 不如加个DS1302& &
KAILAI 发表于
曾经做过一个 感觉误差还是偏大 还有掉电要重新设置 不如加个DS1302
这个就是玩玩而已,说实在话,以前没接触过单片机,
KAILAI 发表于
曾经做过一个 感觉误差还是偏大 还有掉电要重新设置 不如加个DS1302
这个就是玩玩而已,说实在话,以前没接触过单片机,真不回会编程
Powered by数码管二进制段码转16进制高低位怎么看_百度知道
数码管二进制段码转16进制高低位怎么看
共阴数码管,比方说显示“0”,a、b、c、d、e、f、g、dp依次1、1、1、1、1、1、0、0。转换成十六进制应该是0xfc啊。为什么要从dp排序?
我有更好的答案
这主要是根据电路的连接来确定的,这样便于的连接,也就是Dp位连接到最高位,这样,要显示小数也容易实现,最高位置1即可。另外,也是习惯性的,大家都习惯这种电路连接和这样算法了。如果你想改变这样的排序,打乱了,那电路也必然是乱的。所以,都是根据硬件电路来确定的。
是这样理解吗:a-dp依次连单片机的P0.0-P0.7,P0.7是这里的最高位。
采纳率:92%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。数码管显示0xa4_中华文本库
数码管循环显示 0~9 程序说明功能说明:用一位数码管循环显示数字 0~9,数字...0F9H,0A4H,0B0H DB 99H, 92H, 82H, 0F8H DB 80H, 90H, 88H, 83H...
项目一 项目一:单只数码管循环显示 0~9 ~设计要求 要求: 一、 设计要求:...本实验用到的共阳极 0 到 9 编码: 0C0H,0F9H,0A4H,0B0H,99H,92H,82H...在51单片机上如何让数码管流水式的显示16进制数,_百度知道
在51单片机上如何让数码管流水式的显示16进制数,
就是刚开始第一个数码管显0,然后下面的灯依次亮显示10,210,,。。一直让其循环下去,这个程序怎么编写,求解
我用的是TX的板
我有更好的答案
今天回来没有多少事情,看看百度问问,然后就用avr单片机写了一个和你程序差不多的程序。可能还有点差距,但是稍微调整一下就好了。数码管事动态扫描显示的,如原理图所示。顺便录了一个视频,可以看看一下啊!希望可以给你一点思路。#define F_CPU UL#include &avr/io.h&#include &util/delay.h&#define INT8U unsigned char&#define INT16 unsigned int&#define LATCH_B0 PORTC&=~_BV(0)#define LATCH_B1 PORTC|=_BV(0)#define LATCH_A0 PORTC&=~_BV(1)#define LATCH_A1 PORTC|=_BV(1) INT8U SMG_Wei[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};/*位1,2,3,4,5,6,7,8,off*/INT8U SMG_Cde[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9*/INT8U DataBuf[8]={0,1,2,3,4,5,6,7,};int main(void){&&&&INT8U i,j;&&&& INT16 uD&&&& DDRA=0xff,PORTA=0x00; /*设置端口B为输出模式,输出为0x00*/&&&& DDRC=0x03,PORTC=0x00;
&&&&while(1)&&&&{& & & & //TODO:: Please write your application code&&&&&
for(j=7;j!=0j--)&&&&
{&&&& &&&&
uDelay=10;&&&& &&&&
while(uDelay--)&&&& &&&&
{&&&&&&&&&&&&
for (i=0;i&8;i++)&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
PORTA=SMG_Cde[DataBuf[i]];&&&&&&&&&&&&&&&&
LATCH_B1;&&&&&&&&&&&&&&&&
LATCH_B0;&&&&&&&&&&&&&&&&
if(i+j&8)&&&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&
PORTA=~SMG_Wei[i+j];&&&&&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&&&&&
}&&&& &&&&
else&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&
PORTA=0&&&&&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
}&&&&&&&&&&&&&&&&
_delay_ms(1); &&&&&&&&&&&&&&&&
PORTA=0x00;&&&&&&&&&&&&&&&&
LATCH_B1;&&&&&&&&&&&&&&&&
LATCH_B0;&&&&&&&&&&&&&&&&
PORTA=0&&&&&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&&&&&
LATCH_A0;&&&&&&&& &&&&&&&&
_delay_us(10);
&&&&&&&& &&&&
}&&&&////////////////////////////////////////////////////////////&&&&
for(j=0;j&8;j++)&&&&
uDelay=10;&&&&&&&&
while(uDelay--)&&&&&&&&
{&&&&&&&&&&&&
for (i=0;i&8;i++)&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
PORTA=SMG_Cde[DataBuf[i]];&&&&&&&&&&&&&&&&
LATCH_B1;&&&&&&&&&&&&&&&&
LATCH_B0;&&&&&&&&&&&&
if(i+j&8)&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&
PORTA=~SMG_Wei[i+j];&&&&&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
}&&&&&&&&&&&&
else&&&&&&&&&&&&
{&&&&&&&&&&&&&&&&
PORTA=0&&&&&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
}&&&&&&&&&&&&
_delay_ms(1); &&&&&&&&&&&&
PORTA=0x00;&&&&&&&&&&&&
LATCH_B1;&&&&&&&&&&&&
LATCH_B0;&&&&&&&&&&&&
PORTA=0&&&&&&&&&&&&
LATCH_A1;&&&&&&&&&&&&
LATCH_A0;&&&&&&&&&&&&
_delay_us(10);
&&&&&&&&&&&&
采纳率:31%
楼主给出一个显示固定数字的程序,如:。大家帮你改一改,就行了。
这个简单啊,你建一个表就行了,直接取表数据放上去显示。 数码管用动态扫描。下面是AVR的代码,你参考一下就行了。 #include &iom64v.h&#include &macros.h&#define SEG PORTA
// 数码管段码 #define SCAN PORTC
// 数码管位选#define uchar unsigned char#define uint
unsigned int///////////////////////////////////////////////////////////// Name
: 段码和位选// In
: // Function : // Explain : 数码管为共阳,低电平时选通数码管///////////////////////////////////////////////////////////uchar seg[]={ 0xc0,0xf9,0xa4,0xb0,0x99,
// 0-4 (共阳)
0x92,0x82,0xf8,0x80,0x98,
// 灭uchar sel[]={ 0xfe,0xfd,0xfb,0xf7,
// 从右向左选择(低电平选通)
0xef,0xdf,0xbf,0x7f }; ///////////////////////////////////////////////////////////// Name
: 8个数码管的状态// In
: // Function : // Explain : 10代表灭,其它数字代表真实的显示值///////////////////////////////////////////////////////////
uchar display[]={ 7,10,10,10,10,10,10,10, // 右边第一个数码管显示7,第二个灭……
6,7,10,10,10,10,10,10,
// 右边第一个数码管显示6,第二个显示7,第三个灭……
5,6,7,10,10,10,10,10,
// 右边第一个数码管显示5,第二个显示6,第三个显示7,第四个灭……
4,5,6,7,10,10,10,10,
// 以此类推,得到向左移动的效果!
3,4,5,6,7,10,10,10,
2,3,4,5,6,7,10,10,
1,2,3,4,5,6,7,10,
0,1,2,3,4,5,6,7
};///////////////////////////////////////////////////////////// Name
: 延时函数// In
: // Function : 用于延时一定时间// Explain : 用12M晶振时,大概延时1ms,///////////////////////////////////////////////////////////void delay_1ms(uint x)
// 用12M晶振时,延时1ms,{ uint i,j; for(i=0; i&x; i++)
for(j=0; j&1720; j++);}///////////////////////////////////////////////////////////// Name
: 端口定义// In
: // Function : 用于定义端口方向等// Explain : ///////////////////////////////////////////////////////////void port_init(void){
PORTA = 0x00;
// PA口设置成输出,数码管段码
PORTB = 0x00;
PORTC = 0x00;
// m103 output only
// PC口设置成输出,数码管位选
PORTD = 0x00;
PORTE = 0x00;
PORTF = 0x00;
PORTG = 0x00;
= 0x00;}///////////////////////////////////////////////////////////// Name
: 初始化函数// In
: // Function : // Explain : ///////////////////////////////////////////////////////////// call this routine to initialize all peripheralsvoid init_devices(void){
// stop errant interrupts until set up
// disable all interrupts
// xtal divider
XMCRA = 0x00;
// external memory
port_init();
// 端口初始化
MCUCR = 0x00;
EICRA = 0x00;
// extended ext ints
EICRB = 0x00;
// extended ext ints
EIMSK = 0x00;
TIMSK = 0x00;
// timer interrupt sources
ETIMSK = 0x00;
// extended timer interrupt sources
// re-enable interrupts
// all peripherals are now initialized}///////////////////////////////////////////////////////////// Name
: 主函数// In
: // Function : // Explain : ///////////////////////////////////////////////////////////void main(void){
uint a,b,c,
init_devices();
delay_1ms(500);
for(b=0; b&8; b++)
// 总共显示8幅(8个左移效果)
for(c=0; c&500; c++)
// 显示一幅,一幅包括8个数码管的显示值
// 送数据时,先关闭显示,以避免重影现象
SEG=seg[display[cnt+b*8]]; // 送数据
SCAN=~sel[cnt];
// 送出数据后,打开显示
delay_1ms(1);
// 延时1ms,动态扫描,让人看得到
// 指向下一个状态
if(cnt==8)
// 判断是否取完8个数码管的状态
#include&reg52.h& #define uchar unsigned char #define uint unsigned int uchar code tab_disp[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code tabwela[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar i,k, uint b,num1[2]; uchar num[5]; void delay(uint z) { uint x,y; for(x=z;x&0;x--) for(y=10;y&0;y--); } void display() { for(j=0;j&5;j
) { P0=tabwela[j]; P2=tab_disp[num[j]]; delay(1); P2=0x00; } } void main() { TMOD=0x20;//定时器1的工作方式2 TH1=0 //装数,设定波特率 9600 TL1=0 TR1=1;//启动定时器1 REN=1;//启动串口接收数据 SM0=0;//串口工作方式1 SM1=1; EA=1;//开总中断 ES=1;//开串口中 while(1) { if(flag==1) { num[0]=b/ 10000; num[1]=b% ; num[2]=b00/100; num[3]=b0/10; num[4]=b; flag=0; SBUF=b; while(TI==1) TI=0; } display(); } } void ser() interrupt 4 { while(RI==1) { RI=0; num1[i]=SBUF; if(i==2) i=0; } if(k==2) { k=0; b=(num1[0]*256) num1[1]; flag=1; } }
那个串口我还没学,不用那个怎么写啊
额,不知道了,采纳我吧
其他1条回答
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 数码管显示16进制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信